我的教授给了我们一个矩阵类的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
我不知道lol会发生什么,我没有正确创建对象吗?我想,一旦我弄清楚了,这是我将如何向实际数组中添加元素吗?
m1.element[0] = 3;
m1.element[1] = 2;
m1.element[2] = 6;
m1.element[3] = 9;
答案 0 :(得分:1)
这个element = new T [rows][cols];
应该是element = new T [rows*cols];
你不能在c ++中分配2d数组。
然后,您可以将i,j
元素作为[i*rows+j]
进行访问。
但你应该覆盖T & operator () (int,int)
不要忘记析构函数和delete[]
答案 1 :(得分:0)
变化:
element = new T [rows][cols];
要:
element = new T [rows*cols];