非常遗憾,不行。
我记得以前用VC6.0的时候,不能在类中定义常静态成员数据。
用VC2003,只能定义常静态整型成员数据,如int char之类的,不能定义float double。
如:
class Test
{
public:
Test();
~Test();
private:
static const int a = 1;
};
用dev-c++的话,常静态成员数据只能是内部数据类型,也就是可以是float、double。如:
class Test
{
public:
Test();
~Test();
private:
static const double a = 5.0;
};
dev-c++中使用的是gcc/g++系列的编译器。我在linux下用g++测试:
class Test
{
public:
Test(){}
~Test(){}
private:
static const string str = string("abcd");
};
g++的编译错误信息是:
a call to a constructor cannot appear in a constant-expression
错误:类中对具有非整数类型‘const std::string’的静态数据成员的初始化无效
就是说不能调用其他类的构造函数。如果这么写是可以通过编译的。
class Test
{
public:
Test(){}
~Test(){}
private:
static const string str; //什么都不写
};
但是这样的数据成员没有用啊。
具体原因我再找找看。
class SimpleClass
{
static const std::string sm_string;
public:
void PrintString() {
if(sm_string.length() > 0)
cout << "\r\n" << sm_string << "\r\n";
}
};
const std::string SimpleClass::sm_string("I love Jessica.HH.Zhang");
这样写就可以了。在类外面初始化static const成员。
但是不要在.h文件中初始化。
class A {
static const string mystr; //在这里的仅仅是声明,像成员函数一样,它的定义要单独写出来
};
//其他文件
const A::string mystr = "string";
楼上说的是,只有静态整数(注意,不仅仅是整型)常量可以在类中声明并初始化,其他的都必须在类外初始化。