2

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

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 和 gcc 4.2.1 的 Mac。

测试类.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

测试类.cpp:

#include "TestClass.h"

#include <iostream>
using namespace std;

TestClass::MyEnum _enum = TestClass::A;

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

测试main.cpp:

#include "TestClass.h"

int main()
{
  TestClass tc;

  tc.printEnum();
}
4

2 回答 2

3

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

TestClass::MyEnum _enum = TestClass::A;

为此,您必须在适当的类范围内专门定义它,如下所示:

TestClass::MyEnum TestClass::_enum = TestClass::A;
于 2013-04-09T03:38:33.617 回答
0

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

在您的示例中,它是 TestClass::MyEnum _enum = TestClass::A;

于 2013-04-09T03:49:16.123 回答