Warnung C4018
-
Hallo zusammen,
ich hab da folgendes Problem:
Exchange.CMemory.Name.push_back(element->getName());
In diesen CString-vector werden verschiedene Name aus einer Datei geschrieben.
Leider bekomme ich folgende Meldung:
warning C4018: '<' : Konflikt zwischen signed und unsigned
c:\program files\microsoft visual studio\vc98\include\vector(156) : Bei der Kompilierung der Member-Funktion 'void __thiscall std::vector<class CString,class std::allocator<class CString> >::insert(class CString *,unsigned int,const class CS
tring &)' der KlassenvorlageHab keine Ahnung was das mit meinem Vektor zu tun hat.
Kann mir jemand weiterhelfen?
Vielen Dank
Scalls
-
Das ist typische STL-Warnungen von VS. Die können in den meisten Fällen einfach ignoriert werden.
Vielleicht hilft ein kleines Workaround, was ich immer benutze:
(Einfach da wo du den vector include machst kopieren)/////////////////////////////////////////////////////////////////////// // STL includes // Use warning level 3 for STL, MS VC doesnt compile cleanly with W4 #pragma warning(push, 3) #pragma warning(disable: 4018) #include <vector> // set warning level to w3 back #pragma warning(pop) // STL includes ////////////////////////////////////////////////////////////////////////
Hoffe das hilft =))
-
Die Nachricht müsste ignoriert werden dürfen. Es scheint sich dabei um einen internen Fehler zu handeln (es könnte aber auch in der Zeile davor vorliegen, denn manchmal wird der Fehler der Zeile danach zugeordnet)
Der Fehler sagt jedenfalls nichts anderes aus als dass eine "kleiner als" Operation auf einen signed und einen unsigned angewendet wurde. Der unsigned kann mehr Zahlen speichern als der unsigned weil er das Minuszeichen nicht extra abspeichern muss. Wenn du jetzt eine sehr grosse Zahl vergleichst wird diese in signed umkonvertiert und die erste 1 im Binärcode (Für eine sehr Grosse Zahl) wird als Minuszeichen interpretiert und die Gefahr dass der Wert dadurch verändert wird besteht. (Die Konvertierung kann auch anderherum erfolgen)
Gefährlich ist dass z.B. hier:char i; while (i != EOF) { ... }
i ist ein char (somit also unsigned [0...255]). EOF ist in den meisten Fällen als -1 definiert. Wenn du jetzt einen Char der positiv ist mit -1 vergleichst kommt immer das selbe Ergebnis raus. Im Beispiel also true -> unendliche Schleife