
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'
这是为什么? 展开
#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'
这是为什么? 展开
3个回答
展开全部
整型const static 数据成员就可以在类的定义体中进行初始化 这句话是没错的,而且这也是一个特例,至于你报错的原因应该是编译器的问题,vc6.0对标准支持不好,用vc 7.0就没这个问题
展开全部
#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++规定不许在类的定义体中对属性进行初始化。
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++规定不许在类的定义体中对属性进行初始化。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个应该是编译器本身的问题吧。
linux下的g++,本段程序能顺利通过。
linux下的g++,本段程序能顺利通过。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询