Я начинаю с C++, поэтому начал немного попрактиковаться, написав свой собственный класс Vector
. Он хранит количество строк и столбцов массива, а элементы динамически распределены.
template <class T>
class Vector {
private:
unsigned int rows;
unsigned int cols;
T **elements;
public:
Vector(unsigned int, unsigned int);
~Vector();
};
template <class T>
Vector<T>::Vector(unsigned int rows, unsigned int cols) {
this->rows = rows;
this->cols = cols;
this->elements = new T[this->rows];
for (int i = 0; i < this->rows; i++) {
this->elements[i] = new T[this->cols];
}
}
template <class T>
Vector<T>::~Vector() {
};
Вот код. Когда я его скомпилирую (я создаю объект для его проверки: Vector<int> test;
), я получаю сообщение об ошибке: "Cannot convert 'int* to 'int** in assignment"
.
Почему я получаю эту ошибку? Я видел многомерный пример динамического размещения в Интернете: http://www.cplusplus.com/forum/beginner/63/
Самая большая ошибка заключается в том, что вам не хватает " *
" при распределении массива указателей:
this->elements = new T*[this->rows];
Помимо этого:
в качестве отправной точки возьмите следующий код:
template <class T>
class Vector {
public:
unsigned int rows;
unsigned int cols;
T** elements;
Vector(unsigned int, unsigned int);
~Vector();
};
template <class T>
Vector<T>::Vector(unsigned int rows, unsigned int cols) {
this->rows = rows;
this->cols = cols;
this->elements = new T*[this->rows];
for (int i = 0; i < this->rows; i++) {
this->elements[i] = new T[this->cols];
}
}
template <class T>
Vector<T>::~Vector() {
for(int i=0; i<this->rows;++i)
delete[] this->elements[i];
delete[] this->elements;
};
int main()
{
Vector<int> obj(2,2);
obj.elements[0][0] = 1;
obj.elements[0][1] = 2;
obj.elements[1][0] = 3;
obj.elements[1][1] = 4;
std::cout << obj.elements[0][0] << " " << obj.elements[0][1] << std::endl;
std::cout << obj.elements[1][0] << " " << obj.elements[1][1] << std::endl;
return 0;
}
new T[size]
возвращаетT*
.elements
T**
.*
где-то в первомnew
выражении. (И называть эту вещь вектором - очень странный выбор. Векторы имеют одно измерение, вы строите матрицу.)