【问题标题】:Passing array to a constructor does not work将数组传递给构造函数不起作用
【发布时间】: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


【解决方案1】:

问题出在您尚未发布的代码中,可能是这样的:

class Sorter {
  int myArray[];
};

你应该这样做:

class Sorter {
  int* myArray;
  size_t mySize;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 2014-03-07
    相关资源
    最近更新 更多