QVector append mit 'error'

Alles rund um die Programmierung mit Qt
Antworten
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

QVector append mit 'error'

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QVector append mit 'error'

Beitrag 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?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

Re: QVector append mit 'error'

Beitrag 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.
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

Re: QVector append mit 'error'

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QVector append mit 'error'

Beitrag 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.
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

Re: QVector append mit 'error'

Beitrag von lespaul »

Ich habe QVector durch QList ersetzt, und es funzt problemlos. Woran das gelegen haben könnte, weiss ich noch nicht.
nebler
Beiträge: 51
Registriert: 9. Juli 2009 15:26

Re: QVector append mit 'error'

Beitrag 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
}
Antworten