【问题标题】:C++ Array Constructor ArgumentsC++ 数组构造函数参数
【发布时间】:2017-02-19 05:19:53
【问题描述】:

快速提问:

如果我有一个名为 something(没关系)的类,然后假设我有类似的东西

 int a[2];
 int b[2];

public:

classname(int a[], int b[]); // Constructor

在我的类(私有成员)中,我想要一个默认构造函数(强制)来初始化这些点(a 和 b)。我正在尝试在我的 main 中应用一些东西,例如:

int main(){

classname x({4,5},{1,10});

return 0;
 }

但我得到的只是一个错误,说没有匹配的构造函数。我也尝试过在构造函数中使用 * 而不是 [] ,但它似乎无论如何都不起作用。我只是想念一些东西。我试图用基本的 C++ 保持简单。

谢谢。

【问题讨论】:

  • 抱歉,刚刚发帖时错过了
  • 我建议你看看std::array

标签: c++ arrays constructor int arguments


【解决方案1】:

问题是数组不能单独使用{ } 初始化。 这样做时可以初始化它们,

int arr[4] = {0, 1, 2, 3};

但这仅仅是因为您“告诉”C++ 数组的大小。如果您尝试在构造函数中执行此操作,它将失败,因为它不知道您的数组的大小。 您想要实现的目标可以通过使用标准容器来完成。正如@NathanOliver 建议的那样,您可以使用std::array,但这样您必须指定数组的固定大小。

#include <array>

class Test
{
public:
    Test(std::array<int, 4> a) {};
};

// now you can call it
Test obj1({0, 1, 2, 4});

但如果你想让它更灵活并且不受限制地固定数组大小,我建议改用std::vector

#include <vector>

class Test
{
public:
    Test(std::vector<int> a) {};
};

// now you can call it with as many objects as you want
Test obj1({0, 1, 2, 4, 5, 6, 7, 8});

【讨论】:

    猜你喜欢
    • 2015-06-17
    • 2011-09-25
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2014-07-09
    • 2011-02-27
    • 1970-01-01
    相关资源
    最近更新 更多