读书人

c++静态成员属性的简单有关问题

发布时间: 2013-02-24 17:58:56 作者: rapoo

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;
}

读书人网 >C++

热点推荐