问题描述
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
};
解决方法
A a; //编译器错误
除非 B 的构造函数以必需的参数(例如B() : a(an_int,an_int) {...}
)显式调用 A 的构造函数,否则将请求没有参数或所有参数的构造函数参数具有默认值,但您没有该构造函数,只有一个构造函数需要2个 int
还有另一种方法可以在类B中声明A类对象,而不必使用指向类A的指针吗?
您没有声明,而是 define /每次实例化 B A 的新实例。 / em>
请注意,您以后可以创建A的实例,而不必像使用 a_ptr 那样使用指针
std::vector<A> a;
,当您知道 A 的实例时,您需要做的事
a.push_back(A(an-int,an-int));
但是您只希望一个实例的事实在 a 的定义中不可见(出于欢迎的评论)