2011-07-23 3 views
0

У меня есть класс, который принимает два аргумента на его конструктор, INT и недействительных (*) (аннулируется) так обычно когда мне нужно позвонить это я делаю это так:класса с не-конструктором по умолчанию, в пределах класса (C++)

obj_child (int_value, pointer_to_foo); 

Теперь я хочу, чтобы создать экземпляр obj_child с постоянными аргументами, внутри другого класса.

Так что я пробовал:

class obj_parent 
{ 

    private: 

     obj_child child_instantiation (int_value, pointer_to_foo); 

}; 

, но это, кажется, дает мне две ошибки компилятора на линии Заявляю child_instantiation, так что я предполагаю, что аргументы не могут быть переданы там, но где-то в другом месте.

Ум вы child_instantiation s должны иметь одни и те же аргументы для всех obj_parent конкретизации, поэтому они не должны быть переданы в качестве obj_parent аргументов конструктора.

Объявление указателя класса, а затем создание нового в куче компиляции, но я не хочу этого делать, и я не знаю, работает ли он (мой отладчик не может посмотреть ссылку, так что это очень сложно контролировать его значения).

class obj_parent 
    { 

     private: 

      obj_child *child_instantiation; 

    }; 

obj_parent:: 
obj_parent (void) 
{ 

    child_instantiation = new obj_child child_instantiation (int_value, pointer_to_foo); 


} 

Спасибо!

(Пожалуйста, не возражает семантику, ребенок - родитель не имеет ничего общего с наследованием, просто не могли думать лучше имен прямо сейчас)

ответ

3

Вы должны инициализировать объект в конструкторе класса.

obj_parent() : child_instantiation (int_value, pointer_to_foo) {} 
+0

Спасибо, что работали! –

1

Вот как бы это

// note that this class has no constructor with 0 args 
class PrimaryClass { 
    public: 
    PrimaryClass(int arg1, void* arg2) { 
     // do something here 
    } 
}; 

class SecondaryClass { 
    private: 
    PrimaryClass my_obj; 
    public: 
    // We call the constructor to my_obj here (using initialization lists) 
    SecondaryClass(int arg1, void* arg2) : my_obj(arg1, arg2) { 
     // other stuff here, maybe 
    } 
}; 
+0

Спасибо, что сработало! –

+0

Удивительный, не беспокойтесь –

Смежные вопросы