今天为了代码更加简洁,用了一个class MSGHelper来定义一些静态成员变量和静态成员函数。
开始时,我的写法是(不是真实代码,只是举例):
<strong>class helper
{
static int index;
static void SENDMSG(tcpsocket *&,string &);
};
static int helper::index=1;
static void helper::SENDMSG(tcpsocket * &sock,string &MSG)
{
if(!sock || MSG.length()==0)
return;
sock->write(MSG);
return ;
}</strong>
竟然编译报错,后来更正为:
<strong>class helper
{
static int index;
static void SENDMSG(tcpsocket *&,string &);
};
int helper::index=1;
void helper::SENDMSG(tcpsocket * &sock,string &MSG)
{
if(!sock || MSG.length()==0)
return;
sock->write(MSG);
return ;
}</strong>
即静态的成员函数或变量在类体外进行定义时要去掉static标识符;
注意:只有当类中的静态成员变量类型是常整形时,可以在类体内初始化,如:
class simple_string
{
static const int length=1;
static char str[length + 1];
};
char simple_string::str[length +1]="default string";
其他类型,即使声明为const类型也不能在静态类中初始化。