Ошибка GCC при использовании кодовых блоков для 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

он не компилируется, и компилятор дает мне эту странную ошибку.

||=== 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 ===|

когда я удаляю неподписанный модификатор, все работает нормально. Вероятно, я кодировал последние 24 часа, поэтому я не понимаю, что случилось, и я поражен. Я не хочу спать, пока этот код не будет компилироваться так, как есть.

am с использованием кодовых блоков на ubuntu и gcc 4.4.3

Спасибо мужчинам

2 ответа

Я бы поспорил, что у вас есть #define unsigned WHATEVER где-то. Или, может быть, вы компилируете с помощью -Dunsigned=WHATEVER.

Итак, компилятор видит const WHATEVER long x всюду, а тип long не имеет смысла.


Этот код компилируется на моем компьютере, используя gcc 4.6.3. Решение заключается в изменении версии компилятора до последней версии.

Но это странная ошибка, возможно, есть ошибка компилятора. Если вы не хотите изменять свою версию компилятора, попробуйте поставить частный раздел в начале класса. Надеюсь, что поможет.

licensed under cc by-sa 3.0 with attribution.