我有一对班级。其中一个有一组静态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
答案 0 :(得分:3)
案例标签必须是编译器常量。静态成员变量不是编译器常量,除非它是常量并在声明中用常量表达式初始化。
所以:
static const uint32_t BAZ = 1;
;或if
代替switch
。