我在我的 C++ Qt 项目中遇到错误“expected class-name before '{' token”。谷歌搜索后,它似乎是循环包含的问题。我有包含 piece.h 的 pawn.h,其中包含 board.h,它通过包含 pawn.h 来完成圆圈。我读过这可以通过前向声明来解决,但我尝试过前向声明一些问题类,但它不起作用。
#ifndef PAWN_H
#define PAWN_H
#include "piece.h"
class Pawn : public Piece
{
Q_OBJECT
public:
explicit Pawn(QWidget *parent = 0);
};
#endif // PAWN_H
.
#ifndef PIECE_H
#define PIECE_H
#include <QWidget>
#include "board.h"
class Board;
class Piece : public QWidget
{
Q_OBJECT
public:
explicit Piece(QWidget *parent = 0);
void setPosition(int rank, int file);
QPixmap pixmap;
protected:
void paintEvent(QPaintEvent *);
private:
int rank;
int file;
int x;
int y;
};
#endif // PIECE_H
.
#ifndef BOARD_H
#define BOARD_H
#include <QWidget>
#include <QVector>
#include <QGridLayout>
#include "square.h"
#include "pawn.h"
#include "knight.h"
#include "bishop.h"
#include "queen.h"
#include "king.h"
class Board : public QWidget
{
public:
explicit Board(QWidget *parent = 0);
QVector < QVector<Square *> > sqrVector;
Pawn *pawn[8];
Knight *knight[2];
Bishop *bishop[2];
Queen *queen;
King *king;
private:
QGridLayout *layout;
};
#endif // BOARD_H
最佳答案
与其随机尝试,不如尝试更改 board.h
以包含所有部分的前向声明:
棋盘.h
class Pawn;
class Knight;
class Bishop;
class Queen;
class King;
并删除相应的#include
语句。 (您可能需要将那些 #include
语句放在 board.cpp
中,当您决定需要查看各种片段类的内部时。)
关于c++ - '{' 标记之前的预期类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7199809/