2017-09-26 158 views
0

我有一个类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; 
} 

当我试试这个,我有:

没有可行的重载 '='

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

+3

'line'是一个对象数组!他们都已经建成。 C++对C#或Java的工作方式不同。 [一本好书或两个是必须的,我想。(https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – StoryTeller

回答

4

你实际上有两个的问题。

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

的第二个问题是,你分配给指针变量line,但line局部变量函数内部。一旦函数返回,对它的所有修改都将丢失,并且您将有内存泄漏。您需要通过参考通过line


在未来与单一类型的数据的集合打交道时,我建议你使用std::vector代替。如果你想添加元素,你仍然需要通过引用来传递向量。

+0

或享受现代C++的美/功率只凭值 – StoryTeller

+0

我的代码已经被自动从C#中产生的一个软件返回向量,我还不是很舒服的C++。我将使用矢量而不是数组。谢谢您的回答。 –

+0

可以肯定的是,'bool UpdateLine(std :: vector * line,int nb)'会更好吗? –

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

line[r]是一个Pixel对象,而不是一个指针,所以你不能指定它的指针。

为什么不使用std :: vector?

+0

我会用向量来代替,这部分已经从C#是自动生成的,我没有想到用矢量替换它 –

+0

@ A.Pissicat大多数时候,你看着用C动态大小的数组++的,你应该使用一个std ::向量来代替。在函数内部创建矢量并按值返回。没有必要传递一个空的函数。 – xaxxon