GCC 错误,同时对常量无符号长字节使用代码块

GCC error while using code blocks for const unsigned long

本文关键字:字节 代码 无符号 常量 错误 GCC      更新时间:2023-10-16

请考虑此代码

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 小时,所以我看不出有什么问题,并且被击中了。在代码按原样编译之前,我不想睡觉。

我在 Ubuntu 和 GCC 4.4.3 上使用代码块

谢谢男人

我敢打赌你在某个地方有#define unsigned WHATEVER。或者也许您正在使用-Dunsigned=WHATEVER进行编译.

因此,编译器到处都可以看到const WHATEVER long x,而long类型在那里毫无意义。

这段代码在我的电脑上编译,使用 gcc 4.6.3 。解决方案是将编译器版本更改为最新版本。

但是,这是一个奇怪的错误,可能存在编译器错误。如果您不想更改编译器版本,请尝试将私有部分放在类的开头。希望有帮助。