編輯:從標題文件添加代碼。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'文件中有什麼。 –
這是一個常見的原因,其中一個包含文件反過來包含此文件(一個循環包含),並且當文件被第二次讀取並且已經定義了包含保護時發生錯誤。 –
如果您轉發聲明戰鬥窗口,則可以刪除包含聲明。這可能會有所幫助。 – Soeren