Seite 1 von 1
QVector append mit 'error'
Verfasst: 20. Oktober 2011 10:39
von lespaul
Hallo Leute,
ich habe da einen einfachen QVector.. Diesen fülle ich mit QPoint Objekten. Die QPoint Objekte werden jedesmal korrekt erstellt.
In der Schleife wird zwar das QVector mit append jedesmal erweitert, allerdings steht jedesmal 'error' an der entsprechenden Position.
Code: Alles auswählen
QVector< QPoint > *l_return = new QVector< QPoint >;
for( int i = 0; i < l_length; i++ )
{
QPoint t(i+10, i+20);
l_return->append(t);
}
return l_return;
Ich danke.
LesPaul
Re: QVector append mit 'error'
Verfasst: 20. Oktober 2011 10:40
von Christian81
1. Warum das ganze mit 'new' allokieren?
2. Was genau ist mit 'allerdings steht jedesmal 'error' an der entsprechenden Position' gemeint? Compiler? Programm? Kommandozeile?
Re: QVector append mit 'error'
Verfasst: 20. Oktober 2011 10:45
von lespaul
Bei jedem Inkrement von i.
Ich sehe mir den Inhalt von l_return im Debugger an, nach jedem inkrement --> eine Zeile mehr mit (error).
Bzgl. new.. Ich gebe am Ende den Zeiger zurück. Nicht als Zeiger, würde das Objekt glaube ich zerstört werden nach Call-Epilog.
Re: QVector append mit 'error'
Verfasst: 20. Oktober 2011 11:04
von jerry42
hallo,
ich hab das eben mal in den QtCreator geworfen dein Beispiel, und hier kompiliert und befüllt es den Vector einwandfrei.
Aufgefallen dabei ist mir, dass bei "l_length" nicht dabei steht wo es herkommt. Hab die Schleife deshalb einfach mal 5 mal durchlaufen.
Ein minimal-kompilierbares Beispiel würde helfen, denn wie gesagt mein Testcode klappt.
gruß
jerry42
Re: QVector append mit 'error'
Verfasst: 20. Oktober 2011 11:20
von franzf
lespaul hat geschrieben:Ich sehe mir den Inhalt von l_return im Debugger an, nach jedem inkrement --> eine Zeile mehr mit (error).
Da steht doch sicher nicht nur "error" sondern eine ausfhrliche Meldung, was ihm (wer auch immer das ist) nicht passt.
Bzgl. new.. Ich gebe am Ende den Zeiger zurück. Nicht als Zeiger, würde das Objekt glaube ich zerstört werden nach Call-Epilog.
Was ist ein "Call-Epilog"? Am einfachsten gibst du eine Kopie (einen Value: QVector<QPoint>) zurück. 1) Sind die Qt-Container implicitly shared, wodurch Kopien billig sind. 2) Macht der Compiler da sowieso RVO (return value optimization), dabei wird das Objekt gleich an der Stelle konstruiert, wo es nach dem Funktionsaufruf landen würde, und somit erst gar keine Kopie stattfindet.
Re: QVector append mit 'error'
Verfasst: 26. Oktober 2011 17:31
von lespaul
Ich habe QVector durch QList ersetzt, und es funzt problemlos. Woran das gelegen haben könnte, weiss ich noch nicht.
Re: QVector append mit 'error'
Verfasst: 10. November 2011 09:05
von nebler
Das der Debugger <error> anzeigt, kann daran liegen, dass er den Typ nicht auflösen kann.
Hierzu hier mal ein Link:
http://www.proggen.org/doku.php?id=wind ... utoexp.dat
Sollte aber Qt eigentlich korrekt erweitern ...
Hast Du den mal geschaut ob er das richtig ablegt und du es nur nicht Debuggen kannst?!?
Also sowas:
vec.append( QPoint( 1, 1 ) );
if( vec[ 0 ] == QPoint( 1,1) ) {
// yeah TEST successfull
} else {
// grml
}