试图使矩阵类工作

Trying to make a matrix class work

本文关键字:工作      更新时间:2023-10-16

我的教授给了我们矩阵类的C 实现,但是我很难使它起作用。

template<typename T>
class matrix {
public:
    matrix(int rows = 0, int cols = 0);
    matrix<T> operator+(const matrix<T>&);
    matrix<T> operator*(const matrix<T>&);
    matrix<T> transpose(const matrix<T>&);

    int rows;
    int cols;
    T* element;

};
template <typename T>
matrix<T>::matrix(int rows, int cols) {
//if rows or cols <0, throw exception
this->rows = rows;
this->cols = cols;
element = new T [rows][cols];
}

在我的CPP文件中,我正在创建一个这样的矩阵对象:

matrix<int> m1(2,2);

但是,我不断收到以下错误:

non-constant expression as array bound
 : while compiling class template member function 'matrix<T>::matrix(int,int)'
 see reference to class template instantiation 'matrix<T>' being compiled
error C2440: '=' : cannot convert from 'int (*)[1]' to 'int *'
1>          Types pointed to are unrelated; conversion requires reinterpret_cast,
 C-  style cast or function-style cast

我不知道发生了什么,大声笑,我不是正确地创建对象吗?我想一旦我弄清楚,这是我将元素添加到实际数组的方式吗?

m1.element[0] = 3;
m1.element[1] = 2;
m1.element[2] = 6;
m1.element[3] = 9;

element = new T [rows][cols];应该是element = new T [rows*cols];您不能在C 中分配2D数组。

然后,您可以将i,j元素作为[i*rows+j]加速。

,但是您应该覆盖T & operator () (int,int)

不要忘记驱动器和delete[]

更改:

element = new T [rows][cols];

to:

element = new T [rows*cols];