Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Andere GUIs - Qt, GTK+, wxWidgets ::  Objekt aus QList löschen.     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Guest123
Unregistrierter




Beitrag Guest123 Unregistrierter 12:07:45 02.09.2010   Titel:   Objekt aus QList löschen.            Zitieren

Hallo zusammen,

Ich will gerade ein Objekt aus einer QList löschen.
Leider bekomne ucg ständig die Fehlermeldung: instantiated from here.

Leider bringt mir das rein gar nichts, da ich keine Ahnung habe warum dies Auftritt.

C/C++ Code:
myList.removeOne(Despawn(buffer));
C/C++ Code:
myList.removeOne(Despawn(buffer));
C/C++ Code:
myList.removeOne(Despawn(buffer));


myList ist eine QList vom Typ 'myObject'.
Despawn - als parameter kommt ein byte array rein - gibt ein objekt vom typ 'myObject' zurück.

Warum will das ganze nicht gelöscht werden?

Grz
l'abra d'or
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.12.2009
Beiträge: 1201
Beitrag l'abra d'or Mitglied 12:18:54 02.09.2010   Titel:   Re: Objekt aus QList löschen.            Zitieren

Guest123 schrieb:
Leider bekomne ucg ständig die Fehlermeldung: instantiated from here.

Leider bringt mir das rein gar nichts,

Und uns bringt das leider auch nicht weiter.
*) Du postest einen kleinen Ausschnitt aus der gesamten Fehlermeldung, der absolut nichtssagend ist.
*) Du gibsts uns keinen wirklich relevanten Code.
*) Deine Beschreibung, wie dein Code "funktioniert" bringt gar nichts.

Lösung:
Poste ein komplettes Codebeispiel. Reduziere dieses aufs Nötigste (keinen unnötigen Ballast wie Events, komplexe Widget-Layouts, Programm-Logik, ...). Einfach minimal eine main, eine Liste, die Objekte deiner Klasse hält, deine KLasse, die du auch im Programm in der Liste speichern willst, in der main fügst du Elemente in die Liste und versuchst eines zu löschen. Achte bitte darauf, dass dein Fehler auch auftritt. Ein funktionierendes Programm bringt nichts wenn man einen Fehler lösen will :P
Guest1234
Unregistrierter




Beitrag Guest1234 Unregistrierter 12:36:24 02.09.2010   Titel:              Zitieren

Alsooo :)

C/C++ Code:
    struct myObject{
        const char* myString;
        int myNumber;
    };
C/C++ Code:
struct myObject{
const char* myString;
int myNumber;
};
C/C++ Code:
    struct myObject{
        const char* myString;
        int myNumber;
    };


C/C++ Code:
    QList<myObject> myList;
C/C++ Code:
QList<myObject> myList;
C/C++ Code:
    QList<myObject> myList;


C/C++ Code:
    myObject Despawn(unsigned char data[]){
        myObject mobj;
        mobj.myNumber = 9;
        mobj.myString = "asdf";
       
        return mobj;
    }
C/C++ Code:
myObject Despawn(unsigned char data[]){
myObject mobj;
mobj.myNumber = 9;
mobj.myString = "asdf";

return mobj;
}
C/C++ Code:
    myObject Despawn(unsigned char data[]){
        myObject mobj;
        mobj.myNumber = 9;
        mobj.myString = "asdf";
       
        return mobj;
    }



Das sind die 3 'elementaren' Dinge. :)
Der Inhalt von Despawn ist nur zum Test da..
Ein richtiges Objekt suchen und dann zurückgeben kommt später rein. ;)

Hilft euch das schon weiter?

grz

PS:
Genau Fehlermeldungen wie sie 1:1 in der IDE stehen:

'instantiated from bool QList<T>::removeOne(const T&) [with T = myObject]' (qlist.h)
'instantiated from here' (testfile.cpp)
'no match for 'operator==' in n->QList<T>::Node::t [with T = myObject]() == t'
l'abra d'or
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.12.2009
Beiträge: 1201
Beitrag l'abra d'or Mitglied 12:47:36 02.09.2010   Titel:              Zitieren

Sehr schön, damit kann man arbeiten :)
Schau dir die Doku zu QList::removeOne() GENAU an. Da steht:
Zitat:
This function requires the value type to have an implementation of operator==().

Das bedeutet, dass du dir für dein "struct myObject" den operator== überladen musst.
Lies dir dazu diesen Artikel durch. Pass aber auf: du hast einen Member "const char*", den kannst du nicht mit "==" vergleichen. Wenn du keinen Grund hast solltest du hier gleich std::string (oder gleich QString, bist ja mit Qt unterwegs) verwenden, ist einfach bequemer :P
Guest1234
Unregistrierter




Beitrag Guest1234 Unregistrierter 13:08:17 02.09.2010   Titel:              Zitieren

Hoi,


Danke vielmals!
C/C++ Code:
bool operator==(myObject const& lhs);  //operator!= analog
C/C++ Code:
bool operator==(myObject const& lhs); //operator!= analog
C/C++ Code:
bool operator==(myObject const& lhs);  //operator!= analog


das ganze sieht jetzt folgendermassen aus.

Laut compiler darf ich nur 1 Argument in den Parameter schreiben (myObject const& lhs, myObject const& rhs - wie in dem Artikel beschrieben) geht also nicht.


Ist das richtig so?
Das entfernen des Objekts aus der Liste funktioniert nun wie gewünscht.

grz
l'abra d'or
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.12.2009
Beiträge: 1201
Beitrag l'abra d'or Mitglied 13:24:45 02.09.2010   Titel:              Zitieren

Guest1234 schrieb:
Laut compiler darf ich nur 1 Argument in den Parameter schreiben (myObject const& lhs, myObject const& rhs - wie in dem Artikel beschrieben) geht also nicht.

Ist das richtig so?

Nein. Du hast dir den Text nicht genau durchgelesen. Da steht:
Zitat:
Wegen möglicher impliziter Konvertierungen des ersten Arguments werden die Operatoren als freie Funktionen definiert, die Argumente bleiben unverändert.

Es ist möglich, den operator== als Member-Funktion zu implementieren. Dann solltest du aber bitte die Funktion "const" machen. Aber (wie der Artikel auch sagt) solltest du den operator== als freie Funktion überladen.
Guest1234
Unregistrierter




Beitrag Guest1234 Unregistrierter 13:37:47 02.09.2010   Titel:              Zitieren

Ok merci viel mal ;)
C/C++ Forum :: Andere GUIs - Qt, GTK+, wxWidgets ::  Objekt aus QList löschen.   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.