Класс с конструктором не по умолчанию, внутри класса (C ++) - PullRequest
0 голосов
/ 23 июля 2011

У меня есть класс, который принимает два аргумента в своем конструкторе: int и void (*) (void) , поэтому обычно, когда мне нужно вызвать его, я делаю это следующим образомthis:

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);


}

Спасибо!

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

Ответы [ 2 ]

3 голосов
/ 23 июля 2011

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

obj_parent() : child_instantiation (int_value, pointer_to_foo) {}
1 голос
/ 23 июля 2011

Вот как бы вы это сделали

// 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
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...