// foo.hpp file
class foo
{
public:
static const int nmConst;
int arr[nmConst]; // line 7
};
// foo.cpp file
const int foo::nmConst= 5;
编译VC 2015返回错误:
1> foo.h(7):错误C2131:表达式未评估为常数
1 GT; 1> foo.h(7):失败是由非常数参数或
引起的 参考非常数符号1> 1> foo.h(7):注意:见用法 ' nmConst'
为什么呢? nmConst是静态常量,其值在* .cpp文件中定义。
答案 0 :(得分:5)
可以使用static const int
成员作为数组大小,但您必须在.hpp文件中的类中定义此成员,如下所示:
class foo
{
public:
static const int nmConst = 10;
int arr[nmConst];
};
这样可行。
P.S。关于它背后的逻辑,我相信编译器一旦遇到类声明就想知道数组成员的大小。如果你在类中保留static const int
成员未定义,编译器将会理解你正在尝试定义可变长度数组并报告错误(它不会等到你是否真的在某处定义了nmconst
)。