evilandfox
@evilandfox
Javascript, meteor, Qt

Два класса ссылаются друг на друга и лежат в разных .h файлах (без .cpp). Как сделать?

Вот пример набросал:
//parent.h
#pragma once
#include <QObject>
#include "child.h"

class Parent : public QObject {
    Q_OBJECT
public:
    Parent() : QObject()
    {
        child = new Child(this);
    }
private:
    Child *child;
};

//child.h
#pragma once
#include <QObject>
#include "parent.h"

class Parent;

class Child : public QObject {
    Q_OBJECT
public:
    Child(Parent *_parent) : QObject(_parent), parentPtr(_parent)
    {}
private:
    Parent *parentPtr;
};


Компилятор в Qt (MinGW 4.9) выплевывает ошибку
C:\Users\Winner\Documents\example\child.h:11: ошибка: no matching function for call to 'QObject::QObject(Parent*&)'
     Child(Parent *_parent) : QObject(_parent), parentPtr(_parent)
                                                                 ^

Как поправить код, чтобы все заработало? Буду премного благодарен
  • Вопрос задан
  • 972 просмотра
Решения вопроса 1
Rou1997
@Rou1997
Child(Parent *_parent) : parentPtr(_parent)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
У вас есть 2 класса, которые ссылаются друг на друга. С точки зрения архитектуры такую ситуацию называют tight coupling, и нужны довольно веские причины, чтобы её допустить. Расскажите подробнее, что делают Parent и Child, может, получится отрефакторить код.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы