使用大小扣除,char数组的初始化器字符串太长

Initializer-string for char array is too long using deduction of size

本文关键字:初始化 字符串 数组 char      更新时间:2023-10-16

我正在使用gcc 4.8.5,我得到错误:

error: initializer-string for array of chars is too long [-fpermissive]
  char filebase[] = "file name base";
                    ^

这段代码来自一个私有char数组,它是类的一部分:

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/

:

因此,可以使用以下两种语句中的任何一种,用以null结尾的字符序列初始化名为myword的char元素数组:
char myword[] = { 'H', 'e', 'l', 'l', 'o', '' };
char myword[] = "Hello"; 

我在这里做错了什么?

编辑:在我的代码片段中添加了实际的错误信息并修复了语法

当您在类中指定初始化器时,请记住这仍然只是默认的字段初始化器。构造函数可以覆盖它。这就是为什么初始化器不能对数组的长度产生任何影响,这也是为什么不能工作的原因。

clang产生更好的诊断:

错误:不能从类内初始化器推导出数组边界

GCC的诊断之所以如此令人困惑,是因为它与GCC扩展相冲突。如果您将-pedantic选项传递给GCC,您会得到一个额外的警告(同样有些误导):

警告:ISO c++禁止零大小数组'filebase'

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

要使它工作,需要显式指定数组的大小。