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

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'
这是为什么?
整型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++规定不许在类的档尺配定义体行指中对属性进行初始化。
这个应该是编译器本身的问题吧。
linux下的g++,本段程序能顺利通过。