我有一个没有默认构造函数的类obj1,以及没有默认构造函数的类obj2,并且将私有变量作为obj1的元素:
我想要类似下面的代码 - 但实际上这不会编译,告诉我obj1没有默认构造函数。
class obj1{
obj1(some parameters){};
}
class obj2{
obj1 _myObj1;
obj2(some parameters){
_myObj1 = obj1(some parameters)
}
}
任何想法?
答案 0 :(得分:2)
您需要将构造函数设置为public,并且需要在obj2构造函数的初始化列表中调用obj1。
class obj1{
public:
obj1(some parameters){};
}
class obj2{
obj1 _myObj1;
public:
obj2(some parameters) : _myObj1(some parameters)
{
}
}
答案 1 :(得分:1)
您必须将构造函数放在public
区域中:
class obj1{
public:
obj1(some parameters){};
}
甚至你是第二堂课:
class obj2{
obj1 _myObj1;
public:
obj2(some parameters) : _myObj1(some parameters){
}
}
更多强>
实际上,当您希望禁止代码直接实例化对象时,私有构造函数非常有用。私有构造函数最常用的是Singleton类。
答案 2 :(得分:1)
将obj1
的构造函数设为public并在obj2
中使用初始化列表。
class obj1{
public:
obj1(some parameters){};
};
class obj2{
obj1 _myObj1;
obj2(some parameters) : _myObj1(some parameters) {
}
};
答案 3 :(得分:-1)
您需要使构造函数可以访问类obj2。这可以通过将其公开以便所有其他类可以使用它来实现,或者您可以将obj2标记为obj1的朋友。
class obj2;
class obj1{
obj1(some parameters){};
friend class obj2;
}
class obj2{
obj1 _myObj1;
obj2(some parameters){
_myObj1 = obj1(some parameters)
}
或将构造函数标记为public
obj1 {
public:
obj1(some parameters){};
}