繁体   English   中英

无法在C ++中的分配中将“ int *”转换为“ int **”

[英]Cannot convert ‘int*’ to ‘int**’ in assignment in C++ [closed]

我是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];

除此之外:

  1. 为什么将向量定义为具有行和列的矩阵?
  2. 分配和使用不再需要的可用内存后
  3. 存取器应该可用

作为起点,请使用以下代码:

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM