先来看代码:
#include <iostream>
#include <vector>
using namespace std;
class Foo {
public:
static const int MEMBER = 1;
};
int main()
{
vector<int> v;
v.push_back( Foo::MEMBER ); // undefined reference to `Foo::MEMBER'
v.push_back( (int) Foo::MEMBER ); // OK
return 0;
}
错误:对‘Foo::MEMBER’未定义的引用.
原因:
因为类的声明并不会进行内存空间的分配。
所以类的静态成员无法在类声明中定义。
因此,类的静态成员需要类内声明,类外定义。并且注意定义尽量不要出现在头文件中,以免造成重复定义。
#include <iostream>
#include <vector>
using namespace std;
class Foo {
public:
static const int MEMBER = 1;
};
const int Foo::MEMBER;
int main()
{
vector<int> v;
v.push_back( Foo::MEMBER ); // undefined reference to `Foo::MEMBER'
v.push_back( (int) Foo::MEMBER ); // OK
return 0;
}
这样就正确了.