Seite 1 von 1
Ein merkwürdiger Fehler
Verfasst: Fr Jun 15, 2012 4:00 pm
von Kmitska
Hallo Leute,
kann mir jemand dies erklären bzw. sagen, wieso mein Compiler meckert?
Code:
Fehler:
Vergleich zwischen vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-compare]|
Was ich daraus verstehe:
-1 ist negativ und
a.find() liefert bei Erfolg eine positive Zahl aus.
Doch, wie kann ich das sonst noch vergleichen?
Und unter MS Windows gab's kein Problem.
Danke im Voraus.
Re: Ein merkwürdiger Fehler
Verfasst: Fr Jun 15, 2012 4:16 pm
von fat-lobyte
Es geht nicht um den Wert der Zahlen, sondern um den Datentypen der Variablen.
.find() gibt einen unsigned (vorzeichenlose) Integer aus, -1 ist aber ein signed integer. Das ist die Warnung.
Warum ist das ein Problem?
Kuckst du, wie -1 binär repräsentiert ist:
0xFFFFFFFF
Das ist, je nach betrachtungsweise entweder -1, wenn die Variable vorzeichenbehaftet ist)oder 4294967295, wenn die Variable Vorzeichenlos ist.
Stell dir vor, du bekommst nun von find die Position 2147483649. Was ist das jetzt? ist es -2147483647 oder +2147483649? Ist das jetzt größer als -1 oder kleiner? Und genau hier ist das Problem.
Re: Ein merkwürdiger Fehler
Verfasst: Fr Jun 15, 2012 4:33 pm
von Xin
Kmitska hat geschrieben:
Was ich daraus verstehe:
-1 ist negativ und a.find() liefert bei Erfolg eine positive Zahl aus.
Doch, wie kann ich das sonst noch vergleichen?
Und unter MS Windows gab's kein Problem.
Was liefert a.find() denn aus, wenn es keinen Erfolg hat?
Re: Ein merkwürdiger Fehler
Verfasst: Fr Jun 15, 2012 4:48 pm
von Kmitska
Xin hat geschrieben:Kmitska hat geschrieben:
Was ich daraus verstehe:
-1 ist negativ und a.find() liefert bei Erfolg eine positive Zahl aus.
Doch, wie kann ich das sonst noch vergleichen?
Und unter MS Windows gab's kein Problem.
Was liefert a.find() denn aus, wenn es keinen Erfolg hat?
Hab jetzt das ausprobiert:
Code: Alles auswählen
int main()
{
string a;
cout << a.find("aa");
return 1;
}
Da kam:
18446744...
Da kommt doch kein -1...
Und
0xFFFFFFFF
ist -1? (Kenne mich da nciht aus)
Re: Ein merkwürdiger Fehler
Verfasst: Fr Jun 15, 2012 5:45 pm
von Kmitska
Also, habe das nun so gelöst (falls es jemanden interessiert)
Weil
a.find() bei Erfolg eine kleinere Zahl als
a.length() bekommt hab ich mir erlaubt dies zu schreiben. :)
Aber mich interessiert das mit dem Binärsystem immernoch... :P
Re: Ein merkwürdiger Fehler
Verfasst: So Jun 17, 2012 9:33 am
von Xin
Kmitska hat geschrieben:
Hab jetzt das ausprobiert:
Code: Alles auswählen
int main()
{
string a;
cout << a.find("aa");
return 1;
}
Da kam:
18446744...
Ich habe das gerade nochmal ausprobiert, bei mir kommt
was gleichbedeutend mit -1 ist.
Die korrekte Abfrage ist hier aber mit npos!
Code: Alles auswählen
#include <string>
#include <iostream>
using namespace std;
int main()
{
string a;
cout << a.find("aa") << endl;
if( a.find("aa") == string::npos )
{
cout << "nicht gefunden\n";
}
return 1;
}
Kmitska hat geschrieben:Und
0xFFFFFFFF
ist -1? (Kenne mich da nciht aus)
Ich seh mal zu, dass wir bald 'nen Artikel darüber haben. Hex sollte schon im Wiki zu finden sein.