Problem mit uint32_t (GCC und Eclipse)



  • Hallo!

    Ich verwende ICU, genauer gesagt die UnicodeString Klasse davon.

    Nun habe ich konkret mit der folgenden Methode ein Problem:
    int8_t caseCompare (const UnicodeString &text, uint32_t options) const

    Möchte ich die Methode nun verwenden, bekommen ich den Fehler, dass uint32_t nicht erkannt wird. Wenn ich jedoch ein leeres Projekt in Eclipse anlege und die komplette Build Config übertrage funktioniert es.

    Es kann somit nicht an den vorgenommenen Einstellungen liegen und muss also an dem Code von mir liegen oder den eingebundenen Headern. Bis jetzt habe ich folgende Header Files eingebunden:

    unicode/unistr.h (ICU)
    fuse.h (FUSE)
    map
    vector
    pair
    iostream

    Ein Einbinden der stdint.h bringt auch nichts.

    Hat jemand eine Idee woran das liegen könnte? Ich nutze Eclipse 3.7.0, CDT 8.0, GCC 4.6.1



  • Mir ist gerade aufgefallen dass der Fehler anscheinend gar kein Fehler ist. zumindest in der Build Console innerhalb von Eclipse gibt GCC den Fehler nicht aus. Anscheinend wird der irgendwie von Eclipse/CDT erzeugt.

    Irgendwelche Ideen?


  • Mod

    Also ganz streng genommen ist uint32_t erst ab C++11 verfügbar und dann in der cstdint . Ein sehr pedantischer (oder alter) Compiler könnte darauf bestehen. Aber irgendwie habe ich den Verdacht, dass du eher irgendwo etwas mit den Headern durcheinander gebracht hast und uint32_t an der Stelle tatsächlich nicht bekannt ist, obwohl dein Compiler eigentlich schon könnte. Was meinst du denn genau, wenn du sagst, dass du einen Fehler bekommst, wenn nicht einen Fehler beim Build?



  • In Elcipse gibt es so ein eigenes Fenster wo Fehler und Warnungen angezeigt werden. Außerdem werden die Fehler ja im Code markiert.

    Ich habe jetzt mal testweiße alle Source- und Headerdateien bis auf eine rausgelöscht und diese geändert:

    #include <iostream>
    #include <stdint.h>
    
    int main(int argc, char* argv[])
    {
       uint32_t test;
       std::cout << test << std::endl;
    
       return 0;
    }
    

    Da bekomme ich zwei Fehler:
    Type 'uint32_t' could not be resolved.

    und als Folgefehler
    Invalid overload of 'std::endl'

    In der Build Console (also die Ausgabe von g++) sieht man keine Fehler und das Build liefert mir auch eine ausführbare Datei die funktioniert.

    Ich weiß aber nicht an welchen Einstellungen das liegen könnte. Wenn ich ein neues Projekt anlege, und die Build Config aus dem anderen Projekt importiere funktioniert es.



  • Gib dem GCC den Parameter -std=c++11 (bzw. -std=c++0x in Versionen unter 4.7) mit und nimm statt <stdint.h> <cstdint> und statt uint32_t std::uint32_t.



  • Was bringt mir das wenn die Methode von UnicodeString aber uint32_t benutzt und es ja anscheinend nicht am Compiler liegt?
    Wie gesagt, das Build läuft ohne Fehler durch, aber es ist sehr störend bzw. verwirrent wenn im Code Fehler angezeigt werden, welche keine sind.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Die Lösung des Rätsels war Deaktivieren und Aktivieren des Indexers, war wohl irgendetwas korrupt...


Anmelden zum Antworten