初始化静态字符串数组(C ++)?

时间:2009-09-03 22:17:00

标签: c++ arrays string static initialization

我不能为我的生活弄清楚如何正确地做到这一点。我有一个类需要存储一些常量(与枚举类型中的值对应的文本) - 我在类中公开地声明它:

const static char* enumText[];

我正试图像这样初始化它:

const char* MyClass::enumText[] = { "A", "B", "C", "D", "E" };

但是gcc给了我以下错误:

'const char * MyClass :: enumText []'不是'class MyClass'的静态成员

我做错了什么?谢谢!

5 个答案:

答案 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'sT.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位于错误的位置(或者不够)。你现在拥有它的方式,不是数组是常量,还是数组中的指针;只是其中的角色元素。