使用大小扣除,char数组的初始化器字符串太长
Initializer-string for char array is too long using deduction of size
我正在使用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
。然后它不接受你的初始化器,因为它不适合零长度数组。
要使它工作,需要显式指定数组的大小。
相关文章:
- 有没有办法在初始化字符串时避免来自 clang-tidy(fuchsia-default-arguments)的警告?
- 如何在 c++ 中初始化字符串的 2D 数组
- 在 C++ 中初始化字符串重要吗?
- 为什么我不能使用统一初始化初始化来初始化字符串?
- 使用大长度缓冲区初始化字符串流是否会使内存使用量加倍
- 在现代C++中初始化字符串的方式是否有不同
- 初始化字符串 c++ 数组中的值
- 初始化 c 字符串的向量
- 在 do-while 循环中初始化字符串将在检查条件之前跳转到它
- 初始化C++字符串向量的向量
- 初始化字符串矢量阵列时的错误
- 如何初始化字符串以包含C 中所需数量的数字数量
- C 在代码中初始化字符串变量时无控制台输出
- 初始化字符串时,额外的卷曲牙套
- 为什么我不能用"\x"初始化字符串
- 如何在C++中最好地初始化字符串向量
- 从二维数组中的char*初始化c++字符串时,读取大小为1的无效值
- C++初始化字符串数组
- 如何在C++中初始化字符串集
- 如何初始化字符串指针