试图使矩阵类工作

时间:2014-01-30 09:33:01

标签: c++ arrays matrix

我的教授给了我们一个矩阵类的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;

2 个答案:

答案 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];