使用大小减去,char数组的Initializer-string太长

时间:2016-07-01 19:51:50

标签: c++ gcc

我正在使用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中的语法

1 个答案:

答案 0 :(得分:3)

在课堂中指定初始化设备时,请记住,这仍然只是默认字段初始化设备。构造函数可以覆盖它。这就是为什么初始化器不会对阵列的长度产生任何影响,以及为什么这不起作用。

clang产生更好的诊断:

  

错误:无法从类内初始值设定项

推导出数组绑定

GCC的诊断之所以令人困惑是因为它与GCC扩展相冲突。如果你通过GCC -pedantic选项,你会收到一个额外的警告(并且有些误导):

  

警告:ISO C ++禁止零大小的阵列' filebase'

GCC正在接受char[]类型的字段定义,并为其提供长度0。然后它不接受你的初始化器,因为它不适合零长度数组。

要使其正常工作,请明确指定数组的大小。