我正在使用gcc 4.8.5而且我收到错误:
error: initializer-string for array of chars is too long [-fpermissive]
char filebase[] = "file name base";
^
这来自的代码片段是一个私有字符数组,它是类的一部分:
class MyClass {
char filebase[] = "file name base";
public:
/* constructor, destructor, functions, none of which use the value */
};
根据以下链接,我认为这在C ++中是合法的: http://www.cplusplus.com/doc/tutorial/ntcs/
哪个州:
“因此,名为myword的char元素数组可以通过以下两个语句中的任何一个使用以null结尾的字符序列进行初始化:”
char myword[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
char myword[] = "Hello";
我在这里做错了什么?
编辑:添加了实际的错误消息并修复了我的代码snippiet中的语法
答案 0 :(得分:3)
在课堂中指定初始化设备时,请记住,这仍然只是默认字段初始化设备。构造函数可以覆盖它。这就是为什么初始化器不会对阵列的长度产生任何影响,以及为什么这不起作用。
clang产生更好的诊断:
错误:无法从类内初始值设定项
推导出数组绑定
GCC的诊断之所以令人困惑是因为它与GCC扩展相冲突。如果你通过GCC -pedantic
选项,你会收到一个额外的警告(并且有些误导):
警告:ISO C ++禁止零大小的阵列' filebase'
GCC正在接受char[]
类型的字段定义,并为其提供长度0
。然后它不接受你的初始化器,因为它不适合零长度数组。
要使其正常工作,请明确指定数组的大小。