在类c ++中创建一个数组而不声明它的大小

时间:2014-03-13 19:07:39

标签: c++ arrays

当我在没有在课堂上声明其大小的情况下创建数组时,它不会给出任何错误 它工作正常,但为什么?这只发生在类中,当我在主函数中执行相同操作时会出错。

class B {
private:
     char array[]; 
public:
    ///.....///
};

3 个答案:

答案 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。

之类的容器