C++ C++;没有默认ctor的私有变量-不编译?

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) } } 有什么想法吗

我有一个没有默认构造函数的类obj1,还有一个也没有默认构造函数的类obj2,它的私有变量是obj1的一个元素:

我想要下面的代码——但实际上它没有编译,告诉我obj1没有默认构造函数

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的朋友,以便可以调用私有构造函数。