未定义的引用静态变量Foo :: a?

时间:2011-07-16 03:35:55

标签: c++ reference undefined

我收到此错误,我不知道这意味着什么:

$ mingw32-g++ Test.cpp -o Test.exe
C:\Documents and Settings\BDL\ccksiYhI.o:Test.cpp:(.text+0x11): undefined reference to 'Foo::a'
collect2: ld returned 1 exit status

这是我的代码。

Test.cpp的

#include <vector>
#include "Test.h"

int main() {
    Foo::a.clear();
    return 0;
}

Test.h

#include <vector>
class Foo {
public:
    static std::vector<int> a;
};

这不是我的原始代码,但我已将其归结为此问题。我是c ++的新手,如果有人能解释为什么这是错误的以及我如何解决它,我将不胜感激。

3 个答案:

答案 0 :(得分:3)

您仍然需要定义成员变量,即使它是静态的。将Test.cpp更改为:

#include <vector>
#include "Test.h"

std::vector<int> Foo::a; // <-- definition

int
main() {
  Foo::a.clear();
  return 0;
}

答案 1 :(得分:1)

您需要在一个翻译单元中定义静态成员,例如在Test.cpp

std::vector<int> Foo::a;

答案 2 :(得分:1)

必须在课堂外定义静态成员。在里面你有一个声明。

网上有很多网站都有例子。搜索“定义C ++静态成员。”

祝你好运,欢迎来到SO。