'{'标记之前的预期类名

时间:2011-08-26 03:44:46

标签: c++ qt

我在C ++ Qt项目中收到错误“'{'token'之前的预期类名。谷歌搜索后,它似乎是一个圆形包含的问题。我有pawn.h,其中包括piece.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

2 个答案:

答案 0 :(得分:4)

不要随意尝试,而是尝试更改board.h以包含所有部分的前向声明:

board.h

class Pawn;
class Knight;
class Bishop;
class Queen;
class King;

删除相应的#include语句。 (当您决定需要查看各个片段类时,您可能需要将这些#include语句放在board.cpp中。)

答案 1 :(得分:1)

您的主要问题在于piece.h。由于board未在文件中明确引用,因此应删除其include和前向声明。这将打破这个圈子。此外,作为Greg pointed outboard.h中只需要前向声明。