【发布时间】:2014-11-09 09:38:46
【问题描述】:
我有一个类,它的构造函数接受一个数组。这里是:
Sorter::Sorter(int arr[]) : myArray(arr[])
{
}
这是标题:
class Sorter
{
protected :
int* myArray[];
public :
Sorter(int* arr[]);
public :
int Bubble();
};
我这样称呼它:
int ar[] = { 15, 5, 8 };
Sorting srt(&ar);
srt.Bubble();
但它会引发以下错误:
1>c:\users\..\Sorter.h(12): warning C4200: nonstandard extension used : zero-sized array in struct/union
1> Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array
我还将声明从..(int arr[]) 更改为..(int* arr[]),但它仍然不起作用。
我已经读到内存块无法复制,因此应该引用它或传递它的地址,虽然我不知道如何解决它。
【问题讨论】:
-
您不能使用零大小的数组来执行此操作,请阅读错误消息。
-
int arr[]只是一个有点误导性的语法,实际上意味着int* arr。 -
我建议尽可能使用
std::array。 -
@shuttle87 你能详细说明一下吗?
-
std::array是 c 样式数组的一个很好的替代品,因为它完成了 c 样式数组所做的事情,而没有数组发生的一些坏事。如果您需要调整它的大小,只需使用std::vector,如果您可以使用这样的容器,则对生产力和可靠性的提升非常大。 parashift.com/c++-faq/arrays-are-evil.html
标签: c++ arrays constructor