c++静态成员属性的简单问题。
class base
{
public:
static int const a=1;
};
int main()
{
int a=base::a;//为什么这句是对的?
int const *p=&base::a;//但这句是错的。
}
编译器报错是(Dev-C++)
[Linker error] undefined reference to `base::a'
我知道怎么样那句错的可以改正对,但就是想不通为什么这样不对。希望高人可以告诉我为什么。感激不尽! c++ class static
[解决办法]
你啥编译器,VC2012U1下没错误
[解决办法]
手头没有GCC,应该是编译器错误地把base::a优化掉了。
[解决办法]
这得看标准了, 记得primer上说过static const是可以直接在类声明里直接声明而不必在外部定义的,但估计这种形式会导致编译器找不到定义从而取不到地址。
还是这样吧:
#include <iostream>
class Base {
public:
static const int n;
};
const int Base::n = 2;
int main( int argc, char* const argv[] )
{
int n = Base::n;
const int *p = &Base::n;
return 0;
}