为什么我不能使用类对象作为参数

时间:2018-11-25 00:23:24

标签: c++ class object constructor

我遇到了让类作为另一个类构造函数的参数传递的问题。基本上,代码是这样的:

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

2 个答案:

答案 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;
    }
};