Передать объект this в список инициализации - PullRequest
3 голосов
/ 05 декабря 2010

Я сократил проблему до следующего примера кода:

class Charizard { //truck
    trainer &myTrainer;
  public:
    Charizard(trainer &tMyTrainer);
};

class trainer {
    Charizard myPokemon;
  public:
    trainer();
};

Charizard::Charizard(trainer &tMyTrainer) : myTrainer(tMyTrainer) {}

Без изменения или добавления открытых членов, как я могу создать конструктор для тренера, чтобы при создании myPokemon в инициализацииВ списке «myTrainer» указывает на созданный трейнер?

Вот что я пробовал:

trainer::trainer() : myPokemon(this) {}

Но, конечно же, «this» - неправильный тип.Я не могу изменить то, что принимает конструктор Charizard (это публичный член), поэтому я не уверен, что делать.Любые идеи?

Примечание: Заголовок может потребоваться немного работы.

Ответы [ 2 ]

5 голосов
/ 05 декабря 2010

Если вам нужен экземпляр объекта вместо указателя, попробуйте:

trainer::trainer() : myPokemon(*this) {}

Будьте осторожны, если Charizard пытается вызвать какие-либо методы для tMyTrainer в своем конструкторе, потому что ваш новый объект trainer еще не был полностью построен в то время.

4 голосов
/ 05 декабря 2010

Ожидается ссылочный тип - просто используйте *this вместо this.

Многие компиляторы в любом случае предупредят об этом: myPokemon будет создано до того, как trainer будет сделано, поэтому он получит ссылку на не построенный trainer. Будьте осторожны, чтобы не вызывать какие-либо методы (или использовать его данные), так как это ведет к неопределенному поведению!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...