初始化通过引用传递的向量

初始化通过引用传递的向量

问题描述:

我有一个类Pixel和类Image带有用于更新像素行的函数。我想初始化像素线。我的问题是初始化矢量。其实我有这样的:初始化通过引用传递的向量

bool UpdateLine(std::vector<Pixel>& line, int nb) 
{ 
    bool noError = true; 
    line = new std::vector<Pixel>(nb); 
    // Do some stuff 
    return noError; 
} 

当我试试这个,我有:

没有可行的重载 '='

我怎么能初始化向量?

+3

这不是Java或C#。 'line.resize(nb);' – WhozCraig

+1

在你的代码中,你不是*初始化矢量,而是分配给它。 –

+0

@NFFX你是怎么想的? – 2017-09-26 09:49:43

您正在使用的表达:

new std::vector<Pixel>(nb) 

返回一个指向std::vector<Pixel>(即:std::vector<Pixel> *),而不是一个std::vector<Pixel>,这是你所需要的。


区分初始化和之间分配有许多工作要做:你是分配line而不是初始化它。

您可以创建一个新的载体,赋值运算符的方式分配line

line = std::vector<Pixel>(nb); 
+0

谢谢,我会再次拿起我的书,我可能误会了 –

你要做的就是分配,未初始化。

初始化向量可以做这样的:

std::vector<int> second (4,100); // four ints with value 100 

在你的情况然而,矢量已经声明的功能之外,所以在这种情况下,你使用vector::resize并做到这一点:

line.resize(nb); // creates 'nb' objects 'Pixel' 

PS:您不需要new关键字,除非您为您的向量动态分配内存。