2017-09-26 3 views
2

Ich habe eine Klasse Pixel und eine Klasse Image mit einer Funktion zum Aktualisieren einer Pixelzeile. Ich möchte die Pixelzeile initialisieren. Mein Problem ist, den Vektor zu initialisieren. Eigentlich habe ich dies:Initialize-Vektor übergeben durch Referenz

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

Wenn ich versuche, das ich habe:

keine tragfähige überlastet '='

Wie kann ich den Vektor initialisieren?

+3

Dies ist nicht Java oder C#. 'line.resize (nb);' – WhozCraig

+1

In Ihrem Code * initialisieren Sie * den Vektor nicht, sondern * zuweisen * ihm. –

+0

@NtFreX Was hältst du davon? –

Antwort

3

Der Ausdruck Sie verwenden:

new std::vector<Pixel>(nb) 

gibt einen Zeiger auf std::vector<Pixel> (d.h .: std::vector<Pixel> *) und kein std::vector<Pixel>, das ist, was Sie brauchen.


Es wird unterschieden zwischen Initialisierung und Zuordnung hat zu tun: Sie sind -line und nicht es Initialisierung zugewiesen wird.

Sie können einen neuen Vektor erstellen und es line mittels eines Operators Zuordnung zuordnen:

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

Vielen Dank, ich werde mein Buch wieder nehmen, habe ich wahrscheinlich missverstanden –

1

Was Sie tun Zuordnung ist, nicht initialisiert werden.

einen Vektor initialisieren könnte wie folgt geschehen:

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

In Ihrem Fall jedoch wird der Vektor bereits außerhalb der Funktion deklariert, so dass in diesem Fall, dass Sie vector::resize verwenden und dies tut:

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

PS: Sie benötigen kein new Schlüsselwort, außer wenn Sie dynamisch Speicher für Ihren Vektor zuweisen.

Verwandte Themen