C ++数组构造函数参数

时间:2016-10-10 18:02:47

标签: c++ arrays constructor int arguments

快速提问:

如果我有一个名为某事的类(没关系)然后让我说我喜欢

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

public:

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

在我的班级(私人会员)中,我想要一个默认构造函数(必填)来初始化这些点(a和b)。我试图在我的主要内容中应用一些东西:

int main(){

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

return 0;
 }

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

谢谢。

1 个答案:

答案 0 :(得分:0)

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

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});