Доступ к исключению разыменованного указателя с помощью вложенных классовC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Доступ к исключению разыменованного указателя с помощью вложенных классов

Сообщение Anonymous »

Я программирую что-то на C++, и при работе с дочерними классами, содержащими указатель на родительские классы, я столкнулся с исключением разыменования указателя. Упрощенный код таков:

Код: Выделить всё

class top {
public:
int val = 0;
class mid {
public:
top* parent;
class low {
public:
mid* parent = nullptr;
void addToVal() {
parent->parent->val += 1;
}
low(mid* Parent) {
parent = Parent;
}
low() {}
};
low child;
mid(top* Parent) {
parent = Parent;
child = low(this);
}
};
mid::low child;
top() {
child = (mid(this)).child;
};
};
int main()
{
top t = top();
t.child.addToVal();
}
Но суть этого кода в том, что у вас есть три класса: верхний класс пытается получить доступ к дочернему элементу среднего класса, затем нижний Класс пытается получить доступ к значению в верхнем классе. Я знаю, что ошибка возникает из этих двух строк: middle::low child; и child =(mid(this)).child; Но я не знаю, почему этот указатель разыменовывается после выполнения это, поскольку указатели на родителей определяются при вызове конструктора Mid, поскольку конструктор Mid также вызывает конструктор Low.

Кто-нибудь знает что здесь происходит, когда создается дочерний элемент?

Подробнее здесь: https://stackoverflow.com/questions/784 ... ed-classes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»