在c++类中创建一个不声明其大小的数组
creating an array without declaring its size, in a class c++
当我创建一个数组而没有在类中声明它的大小时,它不会给出任何错误它工作得很好,但为什么呢?这只发生在类内部,当我在主函数中做同样的事情时,它会给出错误。
class B {
private:
char array[];
public:
///.....///
};
看来你的编译器实现了灵活的数组成员(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.
Oracle: "test.cc", line 3: Error: In this declaration "array" is of an incomplete type "char[]".
PS:注意你使用它的方式在C中也是错误的:在灵活的
如果这不是您的程序的要求,那么我建议使用std::vector
,因为它的"灵活性"和性能。你不必担心你刚才问的问题:
class B
{
private:
std::vector<char> array;
public:
///......///
}
首先,大小为空的数组是非标准的。同样的代码不能用符合ANSI c++的编译器编译。
您可能使用的是具有允许空数组声明扩展的编译器(可能是gcc/g++)。关闭扩展,你会得到一个编译错误。
要解决这个问题,可以使用std::vector这样的容器。相关文章:
- 在类c++中使用new声明数组
- 为什么不能用常量表达式声明数组?
- 声明数组后我无法添加数组
- 可以使用<size_t>static_const(),std::as_const()或static_cast<const size_t>()来声明数组吗?
- 变量未在此范围内声明 数组线性搜索
- 在类中声明数组. C++
- T D[N] 总是声明数组类型的对象吗?
- 如何使用智能指针在二维上声明数组?
- 声明数组>> int arr[] 时出错;在C++(虽然在 Java 中有效)?
- 在C 类中声明数组数据
- 声明数组时出现 SIGSEGV 错误,而不创建新的 int[size]
- 如何在不初始化常量的情况下声明数组?
- 使用函数在函数中声明数组值
- 以C++声明数组的时间复杂度
- 通过传递数组长度在函数内声明数组
- 通过引用传递数组,而不在函数声明中显式声明数组的大小
- 声明数组和打印[错误?]
- 用内核参数在CUDA内核中声明数组
- 如何在不依赖#Define的情况下转发声明数组大小
- 声明数组已经填充了零