【发布时间】:2020-10-18 08:52:19
【问题描述】:
我希望一个类的对象包含在另一个类中。
类 A 包含在类 B 中,如下面的简单示例所示。
问题是A类只有一个参数化的构造函数。
是否有另一种方法可以在 B 类中声明 A 类对象,而不必使用指向 A 类的指针?
class A
{
public:
A(int var1, int var2);
private:
//...
};
class B
{
public:
B();
private:
A a; // Compiler error
A* a_ptr; // This will of course work fine. We can create a new A object with parameters any time using the a_ptr
};
【问题讨论】:
-
我猜这个编译器错误足以理解在这种情况下你可以做什么:---'B'的构造函数必须显式初始化没有默认构造函数的成员'a'
-
很遗憾,您歪曲或误解了您的问题。
B具有A类型的成员不会导致编译错误,除非A的定义对编译器不可见(例如,从先前包含的头文件中)。如果B的构造函数尝试使用A没有的构造函数来构造A,则会导致编译错误。将Bs 构造函数的定义更改为(假设没有在类B的定义中内联)到B::B() : A (2,3) {},它将编译。 (我随机选择了2和3的值来说明这一点)。 -
@Peter 你的意思是
B::B() : a (2,3) {}(a 不是 A) 因为 B 不继承 A 并且你想为 a 的 A 的构造函数提供参数
标签: c++ class pointers constructor