【发布时间】:2017-01-15 11:53:48
【问题描述】:
编辑:从标题文件中添加代码。
现在我正在做某种模拟,但出现了一些问题。 我有一些像下面这样的课程:
#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;
};
而我想做的是:
STL列表中对象的调用方法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文件中有什么内容。 -
这种情况的常见原因是其中一个包含文件又包含该文件(循环包含),并且在已定义包含保护的情况下第二次读取该文件时会发生错误。
-
如果转发声明battlewindow,可以删除include语句。这可能会有所帮助。
-
尝试删除“battlewindow.h”的包含,因为您已经向前声明了 BattleWindow 类并且您只作为指针传递,因此不需要完整的定义。顺便说一句,在您的代码中坚持使用一种语言,混合两种语言并不是一个好主意;)
-
就像我之前说的。但是你的语言是对的。阅读代码非常困难,您不知道代码应该做什么。
标签: c++ inheritance this