C++类中const static数据成员初始化的问题

C++Primer第四版中文版第401页提到:只要初始化式是一个常量表达式,整型conststatic数据成员就可以在类的定义体中进行初始化。在类内部提供初始化式时,成员... C++Primer 第四版中文版第401页提到:只要初始化式是一个常量表达式,整型const static 数据成员就可以在类的定义体中进行初始化。在类内部提供初始化式时,成员的定义不必再指定初始值。于是我编写如下程序进行验证:
#include <iostream>

using namespace std;

class A
{
public:
A():mem1(2){}
int mem1;
const static int mem2=4;
};

const int A::mem2;

int main()
{
A a;
cout<<a.mem1<<endl<<a.mem2<<endl;
return 0;
}
但是编译器却报错了:

E:\Project\test03\test03.cpp(10) : error C2258: illegal pure syntax, must be '= 0'
E:\Project\test03\test03.cpp(10) : error C2252: 'mem2' : pure specifier can only be specified for functions
E:\Project\test03\test03.cpp(13) : error C2039: 'mem2' : is not a member of 'A'
E:\Project\test03\test03.cpp(6) : see declaration of 'A'
E:\Project\test03\test03.cpp(13) : error C2734: 'mem2' : const object must be initialized if not extern
E:\Project\test03\test03.cpp(18) : error C2039: 'mem2' : is not a member of 'A'
E:\Project\test03\test03.cpp(6) : see declaration of 'A'
这是为什么?
展开
 我来答
Sywzy
2011-06-19 · TA获得超过342个赞
知道小有建树答主
回答量:218
采纳率:0%
帮助的人:193万
展开全部
整型const static 数据成员就可以在类的定义体中进行初始化 这句话是没错的,而且这也是一个特例,至于你报错的原因应该是编译器的问题,vc6.0对标准支持不好,用vc 7.0就没这个问题
浅夏微凉耶
2011-06-19 · TA获得超过1390个赞
知道小有建树答主
回答量:1865
采纳率:0%
帮助的人:833万
展开全部
#include <iostream>

using namespace std;

class A
{
public:
A():mem1(2){}
int mem1;
const static int mem2;
};

const int A::mem2=4;

int main()
{
A a;
std::cout<<a.mem1<<endl<<a.mem2<<endl;
return 0;
}
c++规定不许在类的定义体中对属性进行初始化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
uptime2046
2011-06-27
知道答主
回答量:17
采纳率:0%
帮助的人:11.7万
展开全部
这个应该是编译器本身的问题吧。
linux下的g++,本段程序能顺利通过。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式