【问题标题】:Cannot convert ‘int*’ to ‘int**’ in assignment in C++ [closed]无法在 C++ 中的赋值中将“int*”转换为“int**”[关闭]
【发布时间】:2014-12-21 06:30:39
【问题描述】:

我是 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&lt;int&gt; test;),我得到错误:"Cannot convert ‘int*’ to ‘int**’ in assignment"

为什么会出现此错误?我在网上看到了多维动态分配的例子,在:http://www.cplusplus.com/forum/beginner/63/

【问题讨论】:

  • new T[size] 返回T*elementsT**
  • 仔细阅读您指向的参考资料。您在第一个 new 表达式中的某处缺少 * 。 (把那个东西称为向量是一个非常奇怪的选择。向量有一个维度,你正在构建一个矩阵。)
  • vector&lt;vector&lt;int&gt;&gt;
  • 谢谢,马特!我必须更加小心。我很抱歉这个白痴问题。
  • @NeilKirk:除非地点很重要

标签: c++ arrays class templates dynamic-memory-allocation


【解决方案1】:

最大的错误是你在分配指针数组时缺少一个'*':

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

Example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多