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

问题描述:

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

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(); 
} 

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

TestClass::MyEnum _enum = TestClass::A; 

要做到这一点,你必须在适当的类范围具体界定它,就像这样:

TestClass::MyEnum TestClass::_enum = TestClass::A; 
+0

Ohhhh ....当然。谢谢! – rainbowgoblin 2013-04-09 03:50:55

课外

静态成员没有定义正确 正确的格式: 类名:: enumtype staticmember = value;

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