2017-09-26 7 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

@NtFreXあなたはどう思いますか? –

答えて

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というキーワードは必要ありません。

関連する問題