初始化字符串的静态数组(C++)?
我不能为我的生活弄清楚如何正确地做到这一点。我有一个需要存储一些常量(对应于值的枚举类型的文本)类 - 我有它在我的类中声明是这样的(公开):初始化字符串的静态数组(C++)?
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" };
检查你的代码,并找到差异。我只能认为你没有在类中定义静态属性,你忘记了包含标题,或者错误地输入了名称。
第5行应该有'X :: enumtext',否则你只是创建一个新的变量。 – 2009-09-03 22:28:24
这是一个错误的答案,我纠正了它。无论如何,代码确实使用gcc进行编译(MacOSX中的4.0和Ubuntu中的4.3) – 2009-09-04 11:59:27
Wooo我觉得很愚蠢,我有一个我没注意到的错字。 – 2009-09-04 13:20:24
正如编译器所说,你正试图定义一个MyClass的静态元素,它将是一个名为enumText的const char *数组。如果你没有在课堂上申报,那就有问题了。
你应该有:
class MyClass
{
//blah
static const char* enumText[];
};
或者你did'nt想要一个静态成员。如果不是,你不应该在名字中使用一个类。
无论如何,这与数组初始化无关。
欧普说:“我已经在我的课堂上公开了这样的声明” – snarf 2009-09-03 22:47:17
@Snarfblam:但是OP所说的和现实通常是两回事 - 尤其是因为他说他所做的事情应该起作用。 – 2009-09-03 22:50:32
下面的代码编译就好了,我在VS 2005:
class MyClass
{
const static char* MyClass::enumText[];
};
const char* MyClass::enumText[] = { "A", "B", "C", "D", "E" };
如果我不得不采取胡乱猜测,我会说,你动初始化线是在一个单独的源文件,你忘了#包含包含MyClass的.h文件。这正是我一直搞砸的事情。
另外,我认为你很可能在错误的地方(或不足够他们)const。现在你已经拥有了它的方式,它不是常量的数组,或者是数组中的指针;只是其中的字符元素。
这将编译用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
声明某处(在另一个标头也许?),它没有声明enumText []。错误消息表明编译器知道MyClass
,但它不知道enumText
成员。
我想看看您是否有多个暗示在阴影中的MyClass
声明。
你能拿wintermute's或T.E.D.'s的例子来编译吗?
尝试:static const char * enumText [];在课堂里? – 2009-09-03 22:20:28
我强烈怀疑这是一些较老的g ++版本,它将'const static char * []'错误地当作'static char * [] const'而不是'static const char * []'(因为'static'处于一个“不寻常”的地方)。 – 2009-09-03 22:45:46
您可以将完整且可编译的代码粘贴到显示问题的答案中吗? – sbi 2009-09-04 07:58:58