访问多个源文件中的C ++静态类成员变量

时间:2011-09-08 13:43:11

标签: c++ compiler-errors static-members

我有一对班级。其中一个有一组静态const uint32_t(以下代码是一个修剪过的例子):

class Foo {
public:
    static const uint32_t BAZ;
    void RunMe(void);
};
class Bar {
public:
    void RunMeAlso(void);
};

我正在为每个cpp文件执行一个类的通常操作,因为实际的类非常大,但我遇到了一个问题。 Foo::RunMe()Bar::RunMeAlso()都可以访问值Foo::BAZ

我在foo.cpp中得到了const uint32_t Foo::BAZ = 1;的定义,但在VS2010中用bar.cpp(它在switch语句中用作case标签)中遇到了编译错误(tho this代码需要是可移植的,但我还没有用gcc检查它。两个头文件都包含在两个源文件中......并尝试在bar.cpp中放置某种extern引用,告诉编译器它在不同的转换单元中没有解决它(创建更多编译错误)...当然,我在这类主题上找到的所有例子都是针对单个类/文件的琐碎案例,其中除了声明之外,有人不知道/忘记使用该定义。

任何人都有想法如何解决这个问题? (我不想使用枚举,但如果这是唯一的其他选项,因为我确定会编译!)

TIA,

-J

1 个答案:

答案 0 :(得分:3)

案例标签必须是编译器常量。静态成员变量不是编译器常量,除非它是常量并在声明中用常量表达式初始化。

所以:

  • 在标题中声明static const uint32_t BAZ = 1;;或
  • 使用if代替switch
顺便说一下,阅读实际的错误信息通常很有帮助。并发布,如果你要询问它......