2017-09-26 57 views
2

我有一個類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

回答

3

您正在使用的表達:

new std::vector<Pixel>(nb) 

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


區分初始化和之間分配有許多工作要做:你是分配line而不是初始化它。

您可以創建一個新的載體,賦值運算符的方式分配line

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

謝謝,我會再次拿起我的書,我可能誤會了 –

1

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

初始化向量可以做這樣的:

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

在你的情況然而,矢量已經聲明的功能之外,所以在這種情況下,你使用vector::resize並做到這一點:

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

PS:您不需要new關鍵字,除非您爲您的向量動態分配內存。