PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit QVector



Demonus
24-03-2004, 10:48
Hey,
ich habe ein Problem mit der Klasse QVector.
Hier mal ein Codeausschnitt (nur Beispiel):


QVector<int> test(20);
test[0]=new int(2);
Ich bekomme immer beim einfügen neuer Elemente die Fehlermeldung:
"error C2106: '=' : Linker Operand muss ein L-Wert sein"

Ich verwende QT 2.3 unter Windows.

bmann
24-03-2004, 11:19
Hi

Also.. Qt 2.3 ist uralt, also vergib mir, wenn ich mich irre. Aber ich denke QVector ist value-based und heisst ab 3.0 aus diesem Grunde QValueVector.
Das bedeutet, dass du den Elementen in dem Vector nur _Werte_ aber keine Zeiger übergeben kannst. Deine 2. Zeile müsste daher so aussehen:

test[0] = 2;


CU
Andi

wraith
24-03-2004, 11:23
Zum einfügen benutzt du bool QVector::insert ( uint i, const type * d ).
operator[] ist erstens const, und zweitens liefert der einen Zeiger zurück, der ist aber nur eine Kopie, daher ist das kein gültiger L-Value.

Demonus
24-03-2004, 11:25
QVector (in Qt 2.3) ist ein Zeiger-Container und daher muss man 'new' verwenden wenn man ein neuer Element einfügen will.

Ich habe es übrigens mal mit der Methode 'insert' probiert und damit finktioniert
es. Hier mal der Code:

test.insert(0, new int(2));

EDIT: @wraith
Das hab ich jetzt auch gesehen. :rolleyes:
Das mit dem Einfügen mittels '[]' hab ich in einem anderen Beispiel gesehen und daher gedacht, dass man es so schreiben kann.

peschmae
24-03-2004, 14:17
Original geschrieben von bmann
Hi

Also.. Qt 2.3 ist uralt, also vergib mir, wenn ich mich irre. Aber ich denke QVector ist value-based und heisst ab 3.0 aus diesem Grunde QValueVector.


Ne. Der heisst in 3.x QPtrVector (k.A. wieso die Pointer nicht ausschreiben)

http://doc.trolltech.com/3.3/qvector.html#9593ea

MfG Peschmä

tuxipuxi
24-03-2004, 16:56
Original geschrieben von peschmae
Ne. Der heisst in 3.x QPtrVector (k.A. wieso die Pointer nicht ausschreiben)

http://doc.trolltech.com/3.3/qvector.html#9593ea

MfG Peschmä
die vektorklasse heißt in 3.x QValueVector, QPtrVector ist pointer-based und wird laut Trolltech in Qt 4 wohl deprecated sein.

gruss,
Michael.

anda_skoa
24-03-2004, 17:03
Original geschrieben von tuxipuxi
die vektorklasse heißt in 3.x QValueVector, QPtrVector ist pointer-based und wird laut Trolltech in Qt 4 wohl deprecated sein.


Was schon ein bischen schade ist, setAutoDelete werde ich vermissen.

Ciao,
_