C++ Lỗi nạp chồng toán tử

Chào mọi người, em đang học về OOP, code về phần nạp chồng toán tử thì gặp lỗi
image
Em có thử viết hàm nhân ma trận thì chương trình chạy đúng, nhưng khi em dùng toán tử * đã nạp chồng thì chương trình không chạy được, cho em hỏi em đã mắc lỗi gì vậy ạ? :frowning: em mới biết chút ít về phần này thôi ạ, em cảm ơn.

Hàm nhân ma trận em cop nguyên của phần nạp chồng qua, nên em nghĩ là sai ở kiểu trả về hoặc cú pháp nạp chồng của em chưa đúng, em lên stackoverflow tìm thì cũng có topic giống của em nhưng topic đấy cũng không ai cung cấp solution

Code:

#include<iostream>
using namespace std;

template <class T>
class Array2D {
private:
    int r;
    int c;
    T** arr;
public:
    // TODO
    Array2D(int r, int c)
    {
        this->r = r;
        this->c = c;
       arr = new T* [r];
        for (int i = 0; i < r; ++i)
        {
            arr[i] = new T[c];
        } 
    }
    Array2D(int r, int c, T init)
    {
        this->r = r;
        this->c = c;
        arr = new T * [r];       
        for (int i = 0; i < r; ++i)
        {
            arr[i] = new T[c];
        }
        for (int i = 0; i < r; ++i)
        {
            for (int j = 0; j < c; ++j)
            {
                arr[i][j] = init;
            }
        }
    }
    ~Array2D()
    {
        this->r = r;
        this->c = c;
        for (int i = 0; i < this->r; ++i)
        {
            delete[] arr[i];
        }
        delete[] arr;
    }
    Array2D<T>* nhanmatran(Array2D<T>* a)
    {
        if (this->c != a->r)
        {
            return NULL;
        }
        else
        {
            Array2D<T>* matrix = new Array2D<T>(this->r, a->c, 0);
            for (int i = 0; i < this->r; ++i)
            {
                for (int j = 0; j < a->c; ++j)
                {
                    for (int idx = 0; idx < this->c; ++idx)
                    {
                        matrix->arr[i][j] += this->arr[i][idx] * a->arr[idx][j];
                    }
                }
            }
            return matrix;
        }

    }
    Array2D<T>* operator*(Array2D<T> *a)
    {
        if (this->c != a->r)
        {
            return NULL;
        }
        else
        {
            Array2D<T>* matrix = new Array2D<T>(this->r, a->c,0);
            for (int i = 0; i < this->r; ++i)
            {
                for (int j = 0; j < a->c; ++j)
                {
                    for (int idx = 0; idx < this->c; ++idx)
                    {
                        matrix->arr[i][j] += this->arr[i][idx] * a->arr[idx][j];
                    }
                }
            }
            return matrix;
        }
      
    }

    int getR() { return this->r; }
    int getC() { return this->c; }

    void disp() {
        for (int i = 0; i < this->r; i++) {
            for (int j = 0; j < this->c; j++) {
                cout << arr[i][j] << " ";
            }
            cout << endl;
        }
    }
};



int main() {
    Array2D<int>* p = new Array2D<int>(3,4,5);
    Array2D<int>* p1 = new Array2D<int>(4, 3, 6);
    Array2D<int> *matrix=p*p1;
    matrix->disp();

    //cout << (*p)[0][1] << endl;
    return 0;
}
1 Like

Con trỏ không nhân với con trỏ được :smiley:

3 Likes

Dạ em nạp chồng toán tử * á anh

Khi nạp chồng bằng phương thức (có cách dùng hàm bạn nữa), toán hạng bên trái bắt buộc phải là đối tượng, ko phải con trỏ.

3 Likes

Toán tử bên phải cũng phải là đối tượng đúng không ạ?

Mod đóng bài giúp em, sau một hồi nghiên cứu cộng thêm solution của anh @rogp10 thì em nghĩ lỗi sai nằm ở biểu thức ở hàm main, nó nên là matrix=(*p) * (*p1) thay thì matrix=p*p1

1 Like

As requested

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?