C++ "std::string" vergleichen; Error: Kein "=="-Operator stimmt ...

T

Tersus

Gast
[gelöst] "std::string" vergleichen; Error: Kein "=="-Operator stimmt ...

Guten Abend,

Microsoft Visual Studio 2012 meckert bei folgender Quelltextzeile:
Code:
if( name == aname ){
	...
}

Es werden die "==" unterstrichen und folgende Meldung erscheint:
Error: Kein "=="-Operator stimmt mit diesen Operanden überein.
Operandentypen sind: std::string == std::string

Der GNU C++ Compiler "g++" kompiliert anstandslos. Nur der Visual C++ Compiler stellt sich hier quer. In Tutorials heißt es, dass man den Datentyp "std::string" mittels "==" auf Identität prüfen kann.

Jemand eine Lösung?
 
Zuletzt bearbeitet von einem Moderator:
Verwenden auch beide die gleiche Standard-Bibliothek? Vielleicht verwendet VS eine Microsoft-eigene Bibliothek, bei der der Operator nicht überladen wurde.
Probiere mal std::string.compare(anderer std::string).
 
Das ist nicht der ganze Quelltext.
Der Fehler liegt irgendwo vorher.

/add: Minimalbeispiel
Code:
#include <iostream>
#include <string>
using namespace std;

 int main()
{
 string name  = "MEIN NAME";
 string aname = "MEIN NAME";

 if(name == aname) {
    cout << "strings sind gleich" << endl;
 }
}

Was ist bei Dir anders?
 
Zuletzt bearbeitet:
Der Fehler war, dass ich <string> nicht eingebunden hatte. Damit ließ sich mein std::string auch nicht mittels std::cout ausgeben.

Unter Linux ist das Einbinden von <string> nicht nötig. :confused_alt:
 
Also eigentlich müsste diese Funktion auch in der Microsoft-Bibliothek sein:
http://msdn.microsoft.com/en-us/library/e4abh74z(v=vs.110).aspx

Wäre eine schöne Standardbibliothek, wenn nicht...

/edit: Zu langsam. Hast du bei Linux irgendwelche Header eingebunden? Vllt. einfach anders sortiert, obwohl mich es auch wundert.

@FreddyMercury: Sofern es sich vermeiden lässt, nicht in die C-Welt zurück fallen. Da sind Fehler vorprogrammiert.
 
Zuletzt bearbeitet:
Fortatus schrieb:
Hast du bei Linux irgendwelche Header eingebunden? Vllt. einfach anders sortiert, obwohl mich es auch wundert.

Ich habe unter Linux nur ein ganz knappen Quelltext niedergeschrieben, ähnlich wie ihn BlöderIdiot hat, nur ohne <string> inkludiert zu haben.

Fortatus schrieb:
@FreddyMercury: Sofern es sich vermeiden lässt, nicht in die C-Welt zurück fallen. Da sind Fehler vorprogrammiert.
Du schreibst es! ;)
 
Tersus schrieb:
Der Fehler war, dass ich <string> nicht eingebunden hatte. Damit ließ sich mein std::string auch nicht mittels std::cout ausgeben.
Unter Linux ist das Einbinden von <string> nicht nötig. :confused_alt:

An sich schon. Allerdings inkludiert der Header <iostream> bereits <string>. Das ist des "Rätsels Lösung" ;-)
 
FreddyMercury schrieb:
Hehe. Kannst auch bei der stl halt string::compare nehmen.

string::compare verhält sich wie strcmp() und sollte auch nur in entsprechenden Situationen verwendet werden.

Oder eine eigene vergleichs funktion schreiben und da theoretisch noch etwas mehr performance rausholen koennen

"Theoretisch", denn: Das schaffst Du nicht.
 
Tersus schrieb:
Der Fehler war, dass ich <string> nicht eingebunden hatte. Damit ließ sich mein std::string auch nicht mittels std::cout ausgeben.

Unter Linux ist das Einbinden von <string> nicht nötig. :confused_alt:

Sind halt verschiedene Implementierungen der Standard C++ Bibliothek. Der Standard schreibt nicht unbedingt immer vor, welcher Standard-Header implizit welche anderen Standard-Header mitinkludiert. Bei deinem Linux-Compiler hatte iostream wohl implizit string mitgebracht. Der MS VC++ 2012 Compiler macht es eben nicht so.
 
Zurück
Oben