可能重复:
C++ - 在类定义中定义静态常量整数成员
注意:有几个现存的问题是类似的问题,但我已经审查了其中的许多问题,但找不到解释这种行为的答案:
假设我有如下代码(在头文件中)
class Foo {
static const int TEST = 33;
public:
void willItWork(void) {
printf("%d", std::max(TEST, 75)); // embedded platform, no streams
}
};
int main(void) {
Foo tester;
tester.willItWork();
}
这将编译,但不会链接。我收到链接器错误
错误:L6218E:未定义符号 Foo::TEST(引用自 foo.o)。
似乎只是将值传递给外部函数会导致问题。在类中的普通表达式或函数中使用TEST
效果很好。如果我改为写willItWork()
为
void willItWork(void) {
int diff = TEST - 23;
printf("%d", diff);
}
没有错误。
我发现了另一个引用 C++ 标准的问题(第 9.4.2 节):
如果静态数据成员是 const 整数或 const 枚举类型,它在类定义中的声明可以指定一个 const-initializer,它应该是一个整数常量表达式。
由于我所做的似乎是“在规则范围内”,任何人都可以为这种奇怪的行为想出任何可能的解释吗?
我在 ideone 上尝试了类似的代码并且没有问题(但是,我无法模仿确切的结构,即那里的头文件)。这是否意味着我使用的链接器不太符合这里的标准?
非常感谢任何见解。我也可以随时提供更多信息。