член класса нуждается в указателе this при инициализации экземпляра

Я пытался создать члена (опору класса 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;
};

Большое спасибо!
Себастьян

2

Решение

Вы не можете инициализировать член класса в объявлении класса. Как вы правильно заметили во фрагменте № 3 — список инициализации конструктора существует для элементов, которые требуют передачи параметров конструктору.

Использование списка инициализации является лучшим способом ИМХО для этого, обратите внимание, элементы инициализируются в порядке, в котором вы их объявляете, но не в порядке в списке инициализаторов:

class B
{
public:
B() : prop(this) {};

A prop;
};
5

Другие решения

Я получил решение сам сейчас.

Для не экспериментальных; Стандарт не на C ++ 11, Лури Ковалисин прав.

Но если мы посмотрим на c ++ 11, мы можем сделать следующее:

class B;

class A
{
public:
A(B* b)
{
// ...
};

};

class B
{
public:
A prop{this};
};

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

2

По вопросам рекламы [email protected]