c++ - char 数组的初始值设定项字符串太长,使用大小扣除

标签 c++ gcc

我正在使用 gcc 4.8.5,但出现错误:

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

此代码片段来自一个私有(private)字符数组,它是类的一部分:

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 元素数组可以通过以下两个语句中的任何一个以空终止字符序列初始化:”

char myword[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
char myword[] = "Hello"; 

我做错了什么?

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

最佳答案

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

clang 产生更好的诊断:

error: array bound cannot be deduced from an in-class initializer

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

warning: ISO C++ forbids zero-size array 'filebase'

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

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

关于c++ - char 数组的初始值设定项字符串太长,使用大小扣除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38153038/

相关文章:

C++语句重新排序

c++ - 循环内的迭代器不会递增

c++ - 应该多久打开/关闭一次 fstream 对象 C++

linux - 适用于 LINUX 的 MATLAB 编译器

c++ - gcc 问题 - 没有匹配的函数调用

c++ - Boost BCP 不输出任何文件?

c++ - 在 Objective-C 中使用 std::list 吗?

c++ - SSE 文档和访问

AndroidGuiExample 编译失败

c - 共享库构造函数不工作