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

时间:2011-11-20 12:15:11

标签: c++ compilation

我有一个没有默认构造函数的类obj1,以及没有默认构造函数的类obj2,并且将私有变量作为obj1的元素:

我想要类似下面的代码 - 但实际上这不会编译,告诉我obj1没有默认构造函数。

class obj1{
    obj1(some parameters){};
}

class obj2{
    obj1 _myObj1;
    obj2(some parameters){
        _myObj1 = obj1(some parameters)
    }
} 

任何想法?

4 个答案:

答案 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){};
}