我有一个班级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;
}
当我尝试这个时,我有:
没有可行的重载'='
如何初始化我的数组的每个元素?
答案 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?