QList mit structs möglich?

Alles rund um die Programmierung mit Qt
Antworten
alfonsospringer
Beiträge: 75
Registriert: 25. September 2007 20:03

QList mit structs möglich?

Beitrag von alfonsospringer »

Code: Alles auswählen


struct skill
{
   public:
   QString name;
   int lvl;
};

int main()
{
   .........
   .........
   QList<skill> skills;
   skill temp;
   temp.name = "Schwerter";
   temp.lvl = 8;
   skills.append(temp);
};

Warum funktioniert das nicht? Wie mmüsste es richtig aussehen?
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Was geht denn daran nicht? Bei mir funktioniert das, auch wenn das Schlüsselwort public in Structs überflüssig ist, da die Member von Structs in C++ standardmäßig sowieso public sind.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
alfonsospringer
Beiträge: 75
Registriert: 25. September 2007 20:03

Beitrag von alfonsospringer »

komisch, jetzt klappts :?

Hasst du villeicht noch eine Idee, wie ich rausfinden kann, ob eines der Elemente der Liste den Namen "xxx" hat?
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Schreib dir nen == Operator für dein Struct. Dann sollte die contains Funktion von QList funktionieren. (siehe Doku: http://doc.trolltech.com/4.3/qlist.html#contains)
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
alfonsospringer
Beiträge: 75
Registriert: 25. September 2007 20:03

Beitrag von alfonsospringer »

wie schreibt man sich operatornen? hab ich noch nie gemacht ;(
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Aber Google hast Du schon mal benutzt oder?
http://www.google.de/search?hl=de&q=ope ... uche&meta=

Code: Alles auswählen

struct skill
{
   QString name;
   int lvl;

   bool operator==(skill const& b) const
   {
      // Vergleich könnte auch anders erfolgen
	   return name == b.name && lvl == b.lvl;
   }
};
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
alfonsospringer
Beiträge: 75
Registriert: 25. September 2007 20:03

Beitrag von alfonsospringer »

gelgengentlich (googleistdeinfreund.de) , thx - das Problem ist nur das verstehen ^^ Kannst du villeicht nochmal erklären, wofür bei der Parameterübergabe die consts notwendig sind?

Code: Alles auswählen


struct skill 
{ 
   QString name; 
   int lvl; 
   bool operator==(skill const& b) const 
   { 
      return name == b.name && lvl == b.lvl; 
   }
}; 

int main() 
{ 
   if (!skilllist.contains("Schwerter"))
   {
      skill temp; 
      temp.name = "Schwerter"
      temp.lvl = 1; 
      skilllist.append(temp);
   };
};

Produzier aber einen Fehler:

Code: Alles auswählen

window.cpp:47: error: no matching function for call to `QList<skill>::contains(const char[10])'
f:/Qt/4.3.1/include/QtCore/../../src/corelib/tools/qlist.h:640: note: candidates are: QBool QList<T>::contains(const T&) const [with T = skill]
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Das const zeigt dem Compiler, dass das übergebene Objekt nicht geändert wird bzw. in diesem Fall auch die aufgerufene Funktion die Objekte nicht ändert (bzw. ändern darf).

D.h. in diesem Fall darf innerhalb der == operator Methode sowohl b als auch das Objekt auf dem die == Methode aufgerufen wird (also das was auf der linken Seite von == steht) durch die Ausführung von == nicht verändert werden.

Der Grund warum das

Code: Alles auswählen

if (!skilllist.contains("Schwerter")) 
nicht funktioniert liegt daran, dass Du in einer QList mit skill Elementen nicht auf eine vorhandene Zeichenkette prüfen kannst. Du kannst nur auf vorhandene skill Elemente prüfen. Eine Möglichkeit das etwas zu vereinfachen wäre nur den Namen beim Vergleich zu prüfen und einen skill-Constructor zu schreiben, der eine Zeichenkette als Parameter annimmt.

Aber das alles hat nichts mit Qt zu tun sondern ausschließlich mit C++, weshalb ich das Thema in ein entsprechendes Forum verlagern würde.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
alfonsospringer
Beiträge: 75
Registriert: 25. September 2007 20:03

Beitrag von alfonsospringer »

da hasst du wohl recht, srry
Antworten