Редактировать: Добавлен код из заголовка файла.Inhertitance + использование объекта (this) в качестве аргумента
Сейчас я работаю над каким-то симуляцией, и возникли некоторые проблемы. У меня есть несколько классов, как этот ниже:
#ifndef CARTYLERIA_H
#define CARTYLERIA_H
#include "cjednostka.h"
#include "cnieruchome.h"
#include "battlewindow.h"
class BattleWindow;
class CArtyleria : public CJednostka, public CNieRuchome <------ error line
{
public:
CArtyleria();
void rysuj(BattleWindow *okno);
};
#endif // CARTYLERIA_H
И когда я пытаюсь скомпилировать есть ошибка в отмеченной линии:
ожидается класс имя, прежде чем «» Маркер
Все работает правильно, пока я не добавлю указатель на объект BattleWindow.
Это хорошая практика, чтобы вызвать метод CArtyleria с
это
в BattleWindow объект класса?
Cjednostka.h:
#include "battlewindow.h"
class CJednostka
{
public:
CJednostka();
virtual void rysuj (BattleWindow *okno) =0;
}
CNieRuchome.h:
class CNieRuchome
{
public:
CNieRuchome();
protected:
int PozycjaX;
int PozycjaY;
};
И battlewindow.h:
#include <coddzial.h>
#include "main.h"
#include "ctimer.h"
#include "cpotyczka.h"
#include "cjednostka.h"
namespace Ui {
class BattleWindow;
}
class CPotyczka;
class BattleWindow : public QMainWindow
{
Q_OBJECT
public:
CPotyczka *potyczka;
void tworz_oddzial();
explicit BattleWindow(QWidget *parent = 0);
~BattleWindow();
std::vector <QGraphicsPixmapItem*> items_vector;
void dodaj_jednostki(std::vector<QString> jednostki, QString frakcja);
void rysuj_jednostke(QString jednostka, QString frakcja, int x, int y);
private slots:
void on_now();
private:
QGraphicsScene *scene;
Ui::BattleWindow *ui;
CTimer *timer;
void rysuj_jednostki(QString frakcja);
void rysuj_plansze();
void rysuj_flagi();
void usun_jednostke (QGraphicsPixmapItem *item);
std::list<CJednostka*> jednostki_do_narysowania;
};
И то, что я хочу сделать, это:
вызов метода для объектов в S Список TL std::list<CJednostka*> jednostki_do_narysowania;
Сейчас она реализуется, как показано ниже:
for(std::list <CJednostka*>::iterator it=jednostki_do_narysowania.begin();it!=jednostki_do_narysowania.end();++it){
(*it)->rysuj(this);
Итак, вы добавили аргумент 'okno', а затем вы получили ошибку для строки, которая определяет базовые классы? Это звучит не так. Как бы то ни было, вы не предоставили достаточно кода. Мы не знаем, что в ваших трех файлах '* .h'. –
Общей причиной этого является то, что один из включенных файлов, в свою очередь, включает этот файл (включает круг), а ошибка возникает, когда файл читается второй раз с уже установленным защитником. –
Если вы перешли декларативный боевой бросок, вы можете удалить оператор include. что поможет. – Soeren