在C++中,写在类里面的可以理解是声明,而不是定义。所以,当我们在类内定义一个静态成员的时候,需要在类外定义静态成员的存在。
#include <iostream>
using namespace std;
class A{
public:
A(){ i = 0; }
void print(){ cout << i << endl; }
void set(int t){ i = t; }
private:
static int i;
};
int A::i; //定义A类中存在的静态成员
int main()
{
A a,b;
a.set(6);
b.print();
return 0;
}
如果没有int A::i
这个说明,那么编译可以通过,链接失败。
提示:无法解析的外部符号”symbol”,即代码引用链接器无法在库和对象文件中找到的内容 (如函数、 变量或标签)。
静态成员只能在定义的时候去初始化,所以不能在初始化列表中去初始化静态成员。
#include <iostream>
using namespace std;
class A{
public:
A():i(3){ }
//error int A::i is a static data member,it can only be initialized at its definition
void print(){ cout << i << endl; }
void set(int t){ i = t; }
private:
static int i;
};
in