枚举类型的C ++静态成员变量将无法编译

时间:2013-04-09 03:34:56

标签: c++ static enums

我正在尝试编写一个带有公共枚举的类,以及该枚举类型的私有静态成员变量。我可以初始化静态变量的值,但如果我尝试在类成员函数中访问它,我的代码将不会链接。这是一个简单的工作示例,将使用:

进行编译
g++ -o TestClass.o TestClass.cpp 

但是当我尝试使用以下命令编译/链接主源文件时失败:

g++ -o test TestClass.o testmain.cpp 

我得到的错误是:

Undefined symbols for architecture x86_64:
  "TestClass::_enum", referenced from:
      TestClass::printEnum()     in TestClass.o
ld: symbol(s) not found for architecture x86_64

我正在使用运行OSX 10.7.5的Mac,使用gcc 4.2.1。

TestClass.h:

#ifndef TEST_CLASS_H
#define TEST_CLASS_H

class TestClass
{
public:
  TestClass() {};  
  void printEnum();

  typedef enum {A, B, C} MyEnum;

private:
  static MyEnum _enum;


};

#endif

TestClass.cpp:

#include "TestClass.h"

#include <iostream>
using namespace std;

TestClass::MyEnum _enum = TestClass::A;

void TestClass::printEnum()
{
  cout << "Value of enum: " << _enum << endl;
}

testmain.cpp:

#include "TestClass.h"

int main()
{
  TestClass tc;

  tc.printEnum();
}

2 个答案:

答案 0 :(得分:3)

下面的代码声明了_enum类型的文件局部变量TestClass::MyEnum。它不提供静态成员变量的定义。

TestClass::MyEnum _enum = TestClass::A;

为此,您必须在适当的类范围中明确定义它,如下所示:

TestClass::MyEnum TestClass::_enum = TestClass::A;

答案 1 :(得分:0)

类外的静态成员未正确定义 适当的格式: classname :: enumtype staticmember = value;

在你的例子中 TestClass :: MyEnum _enum = TestClass :: A;