当我在没有在课堂上声明其大小的情况下创建数组时,它不会给出任何错误 它工作正常,但为什么?这只发生在类中,当我在主函数中执行相同操作时会出错。
class B {
private:
char array[];
public:
///.....///
};
答案 0 :(得分:7)
您的编译器似乎实现了灵活的数组成员(C语言特性)作为C ++的扩展。
在启用标准合规性的情况下编译您的程序,产生以下诊断:
铛:
main.cpp:3:11: error: flexible array member 'array' in otherwise empty class is a GNU extension [-Werror,-Wgnu-empty-struct]
char array[];
^
main.cpp:3:11: error: flexible array members are a C99 feature [-Werror,-Wc99-extensions]
GCC
test.cc:3:17: error: ISO C++ forbids zero-size array 'array' [-pedantic]
IBM:
"test.cc", line 3.11: 1540-2887 (S) A flexible array member is not permitted in this scope.
甲骨文:
"test.cc", line 3: Error: In this declaration "array" is of an incomplete type "char[]".
PS:请注意,您使用它的方式也是C中的错误:在灵活性之前至少需要一个指定成员
答案 1 :(得分:0)
如果这不是您的计划的要求,那么我建议使用std::vector
,因为它具有“灵活性”和性能。你不必担心你刚才问的问题:
class B
{
private:
std::vector<char> array;
public:
///......///
}
答案 2 :(得分:0)
首先,空白大小的数组是非标准的。相同的代码不会使用符合ANSI C ++的编译器进行编译。
您可能正在使用的是具有允许空数组声明(可能是gcc / g ++)的扩展的编译器。关闭扩展,您将收到编译器错误。
要解决此问题,请使用诸如std :: vector。
之类的容器