C++ - Ungültige Argumente, die Kandidaten sind : ".." auf Setter aus verschiedenen Klassen

Immer eine seltsame Fehlermeldung, die ich nicht lösen konnte.

Habe ich paar Dateien, Store.cpp, Speichern.h (Klasse Store ist hier definiert), Order.cpp, Um.h (Klasse Bestellung ist hier definiert).

Store.cpp hat #include "Order.h".

Innerhalb der Klasse Order ich habe ein paar setter und Getter im öffentlichen Bereich, ist einer von Ihnen :

void setStatus(const OrderStatus& orderStatus);

OrderStatus ist ein enum.

Wenn ich versuche, es zu benutzen Store.cpp mit der folgenden Zeile :

(*itr).setStatus(ORDER_DONE);

Ich bekomme diese Fehlermeldung von eclipse :

 Ungültige Argumente' 
Kandidaten sind: 
void setStatus(const enum {order.h:140} &) 
' 

Die Fehlermeldung vom GCC :

Speichern.cpp:250:31: Fehler: keine passende Funktion für Aufruf von 
âOrder::setStatus(OrderStatus) constâ 
Store.cpp:250:31: Anmerkung: Kandidat ist: 
um.h:47:7: Anmerkung: void Auftrag::setStatus(const OrderStatus&)
um.h:47:7: Anmerkung: keine bekannte Umwandlung für impliziten âthisâ parameter aus âconst Um*â zu âOrder*â

Ich weiß wirklich nicht wo die const kamen aus (Linie 250).

  • Ooops, sorry, ich meinte, Sie brauchen einen non-const iterator.
  • Dies ist, was ich mit.. für(set<Der>::iterator itr = this->Bestellungen.begin() ; itr != dieser->Bestellungen.end() ; ++itr)
  • Sets erlauben nur const-Zugriff, sonst könnte man es Total verhauen die Bestellung.
  • Oh. Also, wie kann ich ändern, was zeigt es an ? Wenn es Punkte auf eine Bestellung, wie kann ich den inneren Bereichen Um, wie um.Preis ?
  • Sie können entweder markieren Sie die Methode const (und die Daten-member mutable), das scheint falsch, oder const_cast die Referenz, was scheint hässlich und fehleranfällig. Oder Sie können map statt set, so können Sie mutieren, der Wert sicher.
  • Das können Sie nicht. Ein Satz ist die falsche datastructure für Ihr problem.
  • Was du also sagst ist, dass der einzige Weg, auf diese Weise zu arbeiten ist, um es zu entfernen aus dem set, update-und insert wieder ?

InformationsquelleAutor Nadav Peled | 2013-06-21
Schreibe einen Kommentar