我发现个现象。在main函数外面初始化Base的私有成员变量a是可以的。比如:
#include <iostream>
using namespace std;
class Base
{
private:
static int a;
public:
static void Fun( )
{
cout<<"静态成员函数可以被继承!"<<endl;
a++;
cout<<"第"<<a<<"次被调用"<<endl;
}
};
class Derived:public Base
{
};
int Base::a=0; //比如这个样子
int main(int argc, char* argv[])
{
int b=1;
while (b)
{
Derived::Fun( );
cout <<"是否继续?退出输入0
"<<endl;
cin>>b;
}
return 0;
}
但是在main函数里面初始化基类的静态成员函数却不可以。比如:
#include "stdafx.h"
#include <iostream>
using namespace std;
class CbaseClass
{
private:
static int a;
public:
static void Fun( )
{
cout<<"静态成员函数可以被继承!"<<endl;
a++;
cout<<"第"<<a<<"次被调用"<<endl;
}
};
class CDerived:public CbaseClass
{
};
int main(int argc, char* argv[])
{
CbaseClass::a=0; //在主函数这里初始化,编译是没有问题的,但却在连接时出错。
int b=1;
while (b)
{
CDerived::Fun( );
cout <<"是否继续?退出输入0
"<<endl;
cin>>b;
}
return 0;
}
这是为什么呢?
我用的编译器是VC6 with sp6
错误信息是:
error LNK2001: unresolved external symbol "public: static int CbaseClass::a" (?a@CbaseClass@@2HA)
[[it] 本帖最后由 VanHorn 于 2008-6-9 21:11 编辑 [/it]]
[[it] 本帖最后由 VanHorn 于 2008-6-9 21:14 编辑 [/it]]