Я пытался создать члена (опору класса A) для класса (B). Этот член «prop» класса A должен получить указатель «this» недавно созданного B-экземпляра, переданного в его конструктор. Так же, как показано в фрагменте (Фрагмент 1) ниже.
Тем не менее, это не удается во время компиляции с сообщением об ошибке:
«Ожидался указатель типов» (перевод с немецкого).
Я думаю, что это о я не могу использовать указатель this в этом контексте, но я не хочу идти по пути Фрагмент 2 и использовать указатель. Это просто не практично для меня.
Есть ли способ сделать это близко к стилю кодирования первого фрагмента?
Фрагмент 1
class B;
class A
{
public:
A(B* b)
{
// ...
};
};
class B
{
public:
A prop(this);
};
Фрагмент 2
class B;
class A
{
public:
A(B* b)
{
// ...
};
};
class B
{
public:
B()
{
this->prop = new A(this);
}
A* prop;
};
Редактировать: только что выяснил этот фрагмент, но когда многие из них в одном классе делает его действительно нечитаемым.
Фрагмент 3
class B;
class A
{
public:
A(B* b)
{
// ...
};
};
class B
{
public:
B() : prop(this) {};
A prop;
};
Большое спасибо!
Себастьян
Вы не можете инициализировать член класса в объявлении класса. Как вы правильно заметили во фрагменте № 3 — список инициализации конструктора существует для элементов, которые требуют передачи параметров конструктору.
Использование списка инициализации является лучшим способом ИМХО для этого, обратите внимание, элементы инициализируются в порядке, в котором вы их объявляете, но не в порядке в списке инициализаторов:
class B
{
public:
B() : prop(this) {};
A prop;
};
Я получил решение сам сейчас.
Для не экспериментальных; Стандарт не на C ++ 11, Лури Ковалисин прав.
Но если мы посмотрим на c ++ 11, мы можем сделать следующее:
class B;
class A
{
public:
A(B* b)
{
// ...
};
};
class B
{
public:
A prop{this};
};
это выглядит немного странно, но больше похоже на то, что я искал.