2012-04-13 4 views
3

mit Betrachten Sie diesen CodeGCC Fehler während Code-Blöcke für const unsigned long

class Reflect : public flemax::annotation::XAnnotation { 
    public: 
    Reflect(const unsigned long id, const std::string& home, const char type, const std::string& name = "me", const int value = 4, const bool valid = false, const signed char gender = 'M') : id_(id), home_(home), type_(type), name_(name), value_(value), valid_(valid), gender_(gender){} 
    ~Reflect() {} 

    const unsigned long id() { return id_; } 
    const std::string& home() { return home_; } 
    const char type() { return type_; } 
    const std::string& name() { return name_; } 
    const int value() { return value_; } 
    const bool valid() { return valid_; } 
    const signed char gender() { return gender_; } 

    private: 
    const unsigned long id_; 
    const std::string home_; 
    const char type_; 
    const std::string name_; 
    const int value_; 
    const bool valid_; 
    const signed char gender_; 

}; // class Reflect 

es nicht kompilieren und der Compiler gibt mir diese seltsame Fehler.

||=== flemax_base, DebugAnnotator ===| 
/programming/cpp-projects/flemax/flemax_base/base/xannottest.cc|21|error: expected ‘,’ or ‘...’ before ‘long’| 
/programming/cpp-projects/flemax/flemax_base/base/xannottest.cc|24|error: expected ‘;’ before ‘long’| 
/programming/cpp-projects/flemax/flemax_base/base/xannottest.cc|25|error: expected ‘;’ before ‘const’| 
/programming/cpp-projects/flemax/flemax_base/base/xannottest.cc|33|error: expected ‘;’ before ‘long’| 
/programming/cpp-projects/flemax/flemax_base/base/xannottest.cc||In constructor ‘flemax::test::Reflect::Reflect(int)’:| 
/programming/cpp-projects/flemax/flemax_base/base/xannottest.cc|21|error: class ‘flemax::test::Reflect’ does not have any field named ‘id_’| 
/programming/cpp-projects/flemax/flemax_base/base/xannottest.cc|21|error: ‘id’ was not declared in this scope| 
/programming/cpp-projects/flemax/flemax_base/base/xannottest.cc|21|error: argument of type ‘const int (flemax::test::Reflect::)()’ does not match ‘const int’| 
/programming/cpp-projects/flemax/flemax_base/base/xannottest.cc|21|error: argument of type ‘const bool (flemax::test::Reflect::)()’ does not match ‘const bool’| 
/programming/cpp-projects/flemax/flemax_base/base/xannottest.cc|21|error: argument of type ‘const signed char (flemax::test::Reflect::)()’ does not match ‘const signed char’| 
||=== Build finished: 12 errors, 0 warnings ===| 

Wenn ich den unsigned Modifier entfernen, funktioniert alles gut. Wahrscheinlich habe ich für die letzten 24 Stunden codiert, so dass ich nicht sehe, was falsch ist, und bin geschlagen. Ich möchte nicht schlafen, bis dieser Code kompiliert, wie es ist.

sind mit Codeblöcken auf Ubuntu und gcc 4.4.3

Dank Männern

Antwort

3

Ich würde wetten, dass Sie irgendwo eine #define unsigned WHATEVER haben. Oder vielleicht kompilieren Sie mit -Dunsigned=WHATEVER. Der Compiler sieht const WHATEVER long x überall, und der long Typ macht keinen Sinn.

+0

Um ehrlich zu sein, dachte ich gar nicht, dass ein solcher Gedanke ein Fehler ist. Vielen Dank!! – maress

+0

Was ich jetzt frage ist, wie dieses Makro überhaupt definiert wurde. – rodrigo

+0

Der Code wurde generiert, daher konnte ich nicht feststellen, welcher Typ von Makro für den Typ definiert wurde. Es war ein Test für generierten Code, um zu sehen, ob er kompiliert wird – maress

0

Dieser Code auf meinem Computer zu kompilieren, gcc 4.6.3 verwenden. Die Lösung besteht darin, die Compiler-Version auf den neuesten Stand zu bringen.

Aber es ist ein seltsamer Fehler, wahrscheinlich gibt es einen Compiler-Fehler. Wenn Sie die Compiler-Version nicht ändern möchten, versuchen Sie, den privaten Abschnitt am Anfang der Klasse zu platzieren. Hoffe, dass Hilfe.

+0

"Compilator"? Sicher meinst du "Compiler". – DCoder

+0

Sorry, das ist ein korrektes Wort in polnisch. –

+0

Das Ändern des ersten privaten Abschnitts hilft auch nicht, auch das Aktualisieren auf gcc/g ++ 4.6.2 – maress

Verwandte Themen