在对象内构造对象

cha*_*had 3 c++ constructor object

我有一个在类内声明的对象A,我想在初始化对象B时初始化对象A:

class A{
    private:
        int num1;
        string word;
    public:
        A(int,word);
};

A::A(int _num1, string _word){
    num1 = num1;
    word = _word;
}

class B{
    private:
        char letter;
        A a;
    public:
        B(char,int,string)
};

B::B(char _letter, int _num1, string _word){
    letter = _letter;
    a(_num1, _word);
}
Run Code Online (Sandbox Code Playgroud)

这给出了错误:只能调用一个函数。我的问题是,我如何在另一个对象内部拥有一个可以由外部对象构造函数初始化的对象。

son*_*yao 5

您应该a使用成员初始值设定项list初始化数据成员。

B::B(char _letter, int _num1, string _word) : a(_num1, _word) {
    letter = _letter;
}
Run Code Online (Sandbox Code Playgroud)

或更好

B::B(char _letter, int _num1, string _word) : letter(_letter), a(_num1, _word) {}
Run Code Online (Sandbox Code Playgroud)

请注意,进入的构造函数主体时Ba必须已初始化。如果不使用上述成员初始化程序列表,a将尝试使用默认构造函数进行初始化,但A没有一个。并且a(_num1, _word);只是试图a像仿函数一样调用它,但是a不是。