Ahojte, vlastně nevím, jak toto vlákno pojmenovat, protože nevím, čím ta chyba je. Domnívám se, že to je tím, že v souboru 1 volám include na soubor 2, ve kterém volám include na soubor 1. Jedná se o Qt aplikaci.
Tady je můj kód:
1. main.cpp
#include "MyWindow.h"
#include <QtWidgets/QApplication>
#include <QTranslator>
int main(int argc, char *argv[])
{
QApplication application(argc, argv);
QTranslator translator;
if (translator.load(":/MyResource/cs_CZ"))
{
application.installTranslator(&translator);
}
MyWindow *win = new MyWindow();
win->show();
return application.exec();
}
2. MyWindow.h
#ifndef MY_WINDOW_H
#define MY_WINDOW_H
#include <QtWidgets/QMainWindow>
#include "ui_myWindow.h"
//#include "Child.h"
class MyWindow : public QMainWindow
{
Q_OBJECT
public:
MyWindow(QWidget *parent = 0);
~MyWindow();
/*
MyWindow* SetChild(Child *child) {
this->p_child = child;
return this;
}
Child* GetChild() { return this->p_child; }
*/
private:
Ui::MyWindowClass ui;
//Child *p_child;
};
#endif // MY_WINDOW_H
3. MyWindow.cpp
#include "MyWindow.h"
#include <QDebug>
MyWindow::MyWindow(QWidget *parent) : QMainWindow(parent)
{
ui.setupUi(this);
}
MyWindow::~MyWindow()
{
//delete p_child;
}
4. Parent.h
#ifndef PARENT_H
#define PARENT_H
#include "MyWindow.h"
class Parent
{
public:
Parent(MyWindow*);
~Parent();
virtual void draw() = 0;
protected:
MyWindow *p_myWindow;
};
#endif // PARENT_H
5. Parent.cpp
#include "Parent.h"
#include <QDebug>
Parent::Parent(MyWindow *win)
{
this->p_myWindow = win;
}
Parent::~Parent()
{
delete this->p_myWindow;
}
6. Child.h
#ifndef CHILD_H
#define CHILD_H
#include "Parent.h"
#include "MyWindow.h"
class Child : public Parent
{
public:
Child(MyWindow *win) : Parent(win) {};
virtual void draw();
};
#endif // CHILD_H
7. Child.cpp
#include "Child.h"
#include <QDebug>
void Child::draw()
{
qDebug("drawing child...");
}
Stručně to popíšu:
1) Mám aplikaci, kde chci zobrazit jednu instanci každého potomka třídy Parent - tzn. že ve třídě MyWindow potřebuji "nainklůdovat" všechny hlavičkové soubory potomků
2) Jelikož budu v potomcích využívat funkcí UI, potřebuji si svoji aplikaci (tedy MyWindow) předat v konstruktoru třídy Parent, proto #include "MyWindow.h"
Problém je v souboru MyWindow.h. Když totiž odkomentuji řádek: #include "Child.h", aplikace se nespustí a najednou dostanu spoustu chyb v souboru Parent.h a Child.h:
Child.h(8): error C2504: 'Parent' : base class undefined
Child.h(10): error C2061: syntax error : identifier 'MyWindow'
Child.h(10): error C2065: 'win' : undeclared identifier
Child.h(10): error C2614: 'Child' : illegal member initialization: 'Parent' is not a base or member
...... a další ......
Mohl byste mi někdo, prosím, poradit, v čem mám chybu?
Dík moc.