C++靜態變量和靜態成員函數的怪脾氣

     今天爲了代碼更加簡潔,用了一個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類型也不能在靜態類中初始化。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章