Я программирую что-то на 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