我遇到了让类作为另一个类构造函数的参数传递的问题。基本上,代码是这样的:
class A
{
public:
int ID;
A(int getID)
{
ID = getID;
}
}
我想像这样将A类用作B类的成员:
class B
{
public:
A someA;
A someB;
int number;
B(A ObjectA, A ObjectB, int getNumber)
{
someA = ObjectA;
someB = ObjectB;
number = getNumber;
}
};
这些错误基本上是因为没有匹配的函数可以调用B::B()
。我不知道这是怎么回事。我已经用对象向量做过类似的事情,所以我想为什么这个东西行不通。任何输入/更正表示赞赏,谢谢!
旁注:我曾尝试按照另一个线程中的建议为B
添加一个默认构造函数,但最终却说无效使用B::B
。
答案 0 :(得分:4)
使用对象的初始化列表:
B(A ObjectA, A ObjectB, int getNumber)
:someA(std::move(ObjectA)), someB(std::move(ObjectB)), number(getNumber)
{
}
这将使用类中的默认move构造函数。
我在这里使用move
是因为您要按值传递对象,因此移动它们很有意义。如果您通过const&传递了它们,则不要移动它们并使用默认的复制构造函数。
仍然,这是关于A
默认构造函数的,在显示的代码中B
默认构造函数没有问题。
答案 1 :(得分:0)
发生错误是因为您没有告诉B
如何初始化其A
属性,因此它正在寻找默认的A
构造函数。
在C ++中,属性初始化由Matthieu进行,而不是在构造函数的主体中进行。您可以添加默认的A
构造函数,但是您必须考虑这是否是您想要的代码行为。
编译下面的代码不会显示任何错误。
class A {
public:
int ID;
A() {}
A(int getID) {
ID = getID;
}
};
class B {
public:
A someA;
A someB;
int number;
B() {}
B(A ObjectA, A ObjectB, int getNumber) {
someA = ObjectA;
someB = ObjectB;
number = getNumber;
}
};