类型枚举的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;
答
课外
静态成员没有定义正确 正确的格式: 类名:: enumtype staticmember = value;
在你的例子中它是 TestClass :: MyEnum _enum = TestClass :: A;
Ohhhh ....当然。谢谢! – rainbowgoblin 2013-04-09 03:50:55