链接器错误:对Class :: enum的未定义引用

时间:2014-01-28 09:19:16

标签: c++ linker linker-errors

我在MyClass中有一个枚举作为类成员:

.h file:

private:
enum pattern { PAT_ZERO, PAT_SEQ, PAT_PIPE };
static enum pattern pattern;

我在一个函数中使用它:

.cpp file:

int MyClass::function(){
    switch (pattern) {
       case PAT_ZERO:
         break;

它编译,但我收到链接器错误。

 In function `MyClass::function()':
MyClass.cpp:(.text._ZN12MyClass11functionEP6threadPvj+0x120): undefined reference to `MyClass::pattern'

我似乎无法弄清楚为什么它是"未定义的引用"。

1 个答案:

答案 0 :(得分:3)

静态数据成员通常需要定义,以及类中的声明,因此在源文件中添加一个:

enum MyClass::pattern MyClass::pattern = PAT_ZERO;

初始化程序是可选的 - 如果你将其删除,它将被初始化为零(即初始化为PAT_ZERO)。