String mit const string vergleichen?
-
Ich bekomme irgendwie keine Fehlermeldung.
Ich habe dein Beispiel ausprobiert und bei mir kam keine Fehlermeldung, bis darauf, dass eine Methode private deklariert ist, was ich behoben habe.
Ich habe außerdem dein Beispiel weiter ausgebaut und bei mir funktioniert alles wie folgt:#include <iostream> #include <string> class CStringvergleich { private: std::string m_Str; public: CStringvergleich(std::string str) { m_Str = str; } bool vergleicheStrings(const std::string& str) { return (m_Str == str); } }; void wait(); int main() { CStringvergleich StrVgl("Hallo"); if(StrVgl.vergleicheStrings("Hallo")) { std::cout << "Die beiden Strings sind gleich!" << std::endl; } wait(); } void wait() { std::cout << "\nZum Beenden ENTER druecken..."; std::cin.clear(); std::cin.sync(); std::cin.get(); }
-
Eisflamme schrieb:
Ich habe in etwa Folgendes:
Hast du geprüft, ob dein "in etwa"-Code den Fehler reproduziert?
-
Hallo,
Wenn du den 'echten' Code hier inkludieren könntest, könnte ich dir eventuell helfen.
Gruss,
samyboy
-
Eisflamme schrieb:
Ich habe in etwa Folgendes:
class Klasse { std::string str; bool vergleiche(const std::string& str2) { return str == str2; } }Jetzt meckert der und sagt, dass es keinen gültigen Vergleichsoperator mit linksseitigem Typen std::string gibt.
Das kompiliert bei mir.
Eisflamme schrieb:
Habe ich etwas total Dummes übersehen oder braucht ihr mehr Code?
Du hast vor allen Dingen nicht Code gezeigt, den Du wirklich kompilieren wolltest. Da fehlt ja zB ein Semikolon hinter der Klassendefinition. Böse, pfui!
-
Solche Fehler entstehen, wenn man <iostream> inkludiert. std::string ist zwar bekannt, aber wichtige Teile (wie eben operator==) fehlen dann. Ich denke, das wird die Fehlerquelle sein

-
Du meinst die using-Klausel fehlt?
- Ich bin zwar noch Anfänger, bezweifel aber stark, dass die Standartoperatoren etwas mit iostream zu tun haben.
-
Er meint wohl eher, dass #include <string> fehlt wie schon vorher erwähnt. Aber ohne Code und Antwort vom Threadersteller kommen wir nicht dahinter

-
krass, anscheinend hab ich echt #include <string> vergessen. Vermutlich tatsächlich, weil ich dachte, er dürfte string ja auch nicht kennen, wenn er operator== nicht kennt. Eines Besseren ich belehrt wurde
dankö!
-
Eisflamme schrieb:
krass, anscheinend hab ich echt #include <string> vergessen. Vermutlich tatsächlich, weil ich dachte, er dürfte string ja auch nicht kennen, wenn er operator== nicht kennt. Eines Besseren ich belehrt wurde
dankö!Das hatte man auch früher haben können, wenn man den Thredverlauf ansieht
.Das Geheimnis: Nur weil in einer der Headerdateien die Klasse string bekannt gemacht wird (möglicherweise nur durch Vorwärtsdeklaration), heißt doch noch lange nicht, dass auch alles andere aus dem Header string bekannt gemacht wird. Operatoren sind ja z.B. meistens freie Funktionen. Das merkst du dann natürlich erst, wenn du diese Dinge tatsächlich benutzt.
Merke: Man verlasse sich nie darauf, dass ein Standardheader einen anderen einbindet. Immer alles einbinden was man braucht.
-
Ja.

Dein merke hab ich auch gestern begriffen. Werde mich dran halten!