快速提问:
如果我有一个名为某事的类(没关系)然后让我说我喜欢
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 ++保持简单。
谢谢。
答案 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});