指向数组的指针 - 初始化元素

时间:2017-09-26 09:17:28

标签: c++ arrays

我有一个班级Pixel和一个班级Image,其功能用于更新像素行。我想初始化像素线。我的问题是初始化数组。其实我有这个:

bool UpdateLine(Pixel line[], int nb)
{
    bool noError = true;
    line = new Pixel[nb];
    for (int r = 0; r < nb; r++)
    {
        line[r] = new Pixel(); // -> line causing troubles

        // do some stuff with my pixel
        [...]
    }
    return noError;
}

当我尝试这个时,我有:

  

没有可行的重载'='

如何初始化我的数组的每个元素?

2 个答案:

答案 0 :(得分:4)

你实际上有两个问题。

首先,关于您的错误,是因为new Pixel()会导致Pixel对象的指针。在C ++中,您不需要new来创建对象(您可能来自Java或C#背景吗?)。数组的初始分配为您创建对象。

第二个问题是您指定了指针变量line,但line是函数内的局部变量。一旦函数返回,对它的所有修改都将丢失,并且您将发生内存泄漏。您需要通过引用传递line

将来处理单一类型数据的集合时,我建议您改用std::vector。如果你想向它添加元素,你仍然需要通过引用传递向量。

答案 1 :(得分:2)

    line[r] = new Pixel(); // -> line causing troubles

line[r]是Pixel对象,而不是指针,因此您无法为其指定指针。

为什么你没有使用std :: vector?