初始化串(C ++)的静态数组?(Initializing static array of stri

2019-07-04 17:32发布

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

const static char* enumText[];

我试图将其初始化是这样的:

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

但是GCC给我下面的错误:

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

我究竟做错了什么? 谢谢!

Answer 1:

此代码编译:

struct X {
   static const char* enumtext[];
};

const char* X::enumtext[] = { "A", "B", "C" };

检查你的代码,并找到差异。 我只能认为你没有定义在类中的静态属性,你忘了,包括页眉或输入错误的名称。



Answer 2:

这将编译用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被引用正确的类?



Answer 3:

由于编译器说,你要定义MyClass的静态memeber,这将是一个const char *数组命名enumText。 如果你没有在IT类的声明,那么有一个问题。

你应该有 :

class MyClass
{
   //blah
   static const char* enumText[];
};

或者你did'nt想要一个静态成员。 如果没有,youy不应该有在名称中使用类。

反正什么都没有做阵列intialization。



Answer 4:

鉴于该错误消息,在我看来,你有一个声明MyClass地方(在另一头也许?)不具有enumText宣布它[]。 该错误消息表明编译器知道MyClass ,但它不知道的enumText成员。

我想看看如果你有多次声明MyClass潜伏在暗处。

你可以得到wintermute的或TED的例子来编译?



Answer 5:

下面的代码编译就好了,我在VS 2005:

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

如果我不得不采取胡乱猜测,我会说,你动初始化线是在一个单独的源文件,你忘了#包括包含MyClass的.h文件。 这正是那种我搞砸了,做所有的时间的事情。

此外,它似乎很容易,我认为你在错误的地方(或数量不够)的常量。 你现在的样子,它不是数组,它是恒定的,或数组中的指针; 只是其中的字符元素。



文章来源: Initializing static array of strings (C++)?