C++ C++;没有默认ctor的私有变量-不编译?
我有一个没有默认构造函数的类obj1,还有一个也没有默认构造函数的类obj2,它的私有变量是obj1的一个元素: 我想要下面的代码——但实际上它没有编译,告诉我obj1没有默认构造函数C++ C++;没有默认ctor的私有变量-不编译?,c++,compilation,C++,Compilation,我有一个没有默认构造函数的类obj1,还有一个也没有默认构造函数的类obj2,它的私有变量是obj1的一个元素: 我想要下面的代码——但实际上它没有编译,告诉我obj1没有默认构造函数 class obj1{ obj1(some parameters){}; } class obj2{ obj1 _myObj1; obj2(some parameters){ _myObj1 = obj1(some parameters) } } 有什么想法吗
class obj1{
obj1(some parameters){};
}
class obj2{
obj1 _myObj1;
obj2(some parameters){
_myObj1 = obj1(some parameters)
}
}
有什么想法吗?您必须将构造函数放在
公共区域:
class obj1{
public:
obj1(some parameters){};
}
即使你是二等舱:
class obj2{
obj1 _myObj1;
public:
obj2(some parameters) : _myObj1(some parameters){
}
}
更多信息:
事实上,当您希望禁止代码直接实例化对象时,私有构造函数非常有用。私有构造函数最常用的用法是单例类 您需要公开构造函数,并且需要在obj2构造函数的初始化列表中调用obj1
class obj1{
public:
obj1(some parameters){};
}
class obj2{
obj1 _myObj1;
public:
obj2(some parameters) : _myObj1(some parameters)
{
}
}
将obj1
的构造函数公开,并使用obj2
中的初始化列表
class obj1{
public:
obj1(some parameters){};
};
class obj2{
obj1 _myObj1;
obj2(some parameters) : _myObj1(some parameters) {
}
};
您需要使构造函数可访问类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){};
}
…或使obj2成为obj1的朋友,以便可以调用私有构造函数。