我不能为我的生活弄清楚如何正确地做到这一点。 我有一个需要存储一些常量(对应于值的枚举类型的文本)类 - 我把它声明如下(公开)在我的课:
const static char* enumText[];
我试图将其初始化是这样的:
const char* MyClass::enumText[] = { "A", "B", "C", "D", "E" };
但是GCC给我下面的错误:
'为const char * MyClass的:: enumText []' 不是 'MyClass类' 的静态成员
我究竟做错了什么? 谢谢!
此代码编译:
struct X {
static const char* enumtext[];
};
const char* X::enumtext[] = { "A", "B", "C" };
检查你的代码,并找到差异。 我只能认为你没有定义在类中的静态属性,你忘了,包括页眉或输入错误的名称。
这将编译用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
被引用正确的类?
由于编译器说,你要定义MyClass的静态memeber,这将是一个const char *数组命名enumText。 如果你没有在IT类的声明,那么有一个问题。
你应该有 :
class MyClass
{
//blah
static const char* enumText[];
};
或者你did'nt想要一个静态成员。 如果没有,youy不应该有在名称中使用类。
反正什么都没有做阵列intialization。
鉴于该错误消息,在我看来,你有一个声明MyClass
地方(在另一头也许?)不具有enumText宣布它[]。 该错误消息表明编译器知道MyClass
,但它不知道的enumText
成员。
我想看看如果你有多次声明MyClass
潜伏在暗处。
你可以得到wintermute的或TED的例子来编译?
下面的代码编译就好了,我在VS 2005:
class MyClass
{
const static char* MyClass::enumText[];
};
const char* MyClass::enumText[] = { "A", "B", "C", "D", "E" };
如果我不得不采取胡乱猜测,我会说,你动初始化线是在一个单独的源文件,你忘了#包括包含MyClass的.h文件。 这正是那种我搞砸了,做所有的时间的事情。
此外,它似乎很容易,我认为你在错误的地方(或数量不够)的常量。 你现在的样子,它不是数组,它是恒定的,或数组中的指针; 只是其中的字符元素。