我不能为我的生活弄清楚如何正确地做到这一点。我有一个类需要存储一些常量(与枚举类型中的值对应的文本) - 我在类中公开地声明它:
const static char* enumText[];
我正试图像这样初始化它:
const char* MyClass::enumText[] = { "A", "B", "C", "D", "E" };
但是gcc给了我以下错误:
'const char * MyClass :: enumText []'不是'class MyClass'的静态成员
我做错了什么?谢谢!
答案 0 :(得分:15)
此代码编译:
struct X {
static const char* enumtext[];
};
const char* X::enumtext[] = { "A", "B", "C" };
检查您的代码并找出差异。我只能认为您没有在类中定义静态属性,您忘记包含标题或者您输入了错误的名称。
答案 1 :(得分:6)
使用gcc 4.0.1编译:
#include <iostream>
class MyClass {
public:
const static char* enumText[];
};
const char* MyClass::enumText[] = { "a", "b", "c" };
int main()
{
std::cout << MyClass::enumText[0] << std::endl;
}
编译:
g++ -Wall -Wextra -pedantic s.cc -o s
您确定 MyClass ::enumText
是否引用了正确的类?
答案 2 :(得分:2)
正如编译器所说,你正在尝试定义MyClass的静态成员,它将是一个名为enumText的const char *数组。如果你在课堂上没有声明,那就有问题了。
你应该:
class MyClass
{
//blah
static const char* enumText[];
};
或者你可能不想要一个静态成员。如果没有,您不应该在名称中使用类。
无论如何,这与数组初始化无关。
答案 3 :(得分:2)
鉴于错误消息,在我看来,你在某处(在另一个标题中可能?)声明了MyClass
没有声明enumText []的声明。该错误消息表明编译器知道MyClass
,但它不知道enumText
成员。
我想看看你是否有多个MyClass
潜伏在阴影中的声明。
您可以编译wintermute's或T.E.D.'s个例子吗?
答案 4 :(得分:1)
以下代码在VS 2005中为我编译好了:
class MyClass
{
const static char* MyClass::enumText[];
};
const char* MyClass::enumText[] = { "A", "B", "C", "D", "E" };
如果我不得不猜测,我会说你的启动行在一个单独的源文件中,你忘了#include包含MyClass的.h文件。这就是我搞砸了并且一直都在做的事情。
另外,我觉得很可能你的const位于错误的位置(或者不够)。你现在拥有它的方式,不是数组是常量,还是数组中的指针;只是其中的角色元素。