标记之前'{'应具有类名

expected class-name before '{' token

本文关键字:      更新时间:2023-10-16

在我的c++ Qt项目中,我得到了错误"在'{'令牌之前预期的类名"。在谷歌上搜索之后,这似乎是一个循环包含的问题。我有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

与其随机尝试,不如尝试更改board.h以包含所有部分的前向声明:

board.h

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

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

您的主要问题在于文件:piece.h。由于board没有在文件中被显式引用,因此它的include和forward声明应该被删除。这会打破这个循环。此外,正如Greg指出的,在board.h中只需要前向声明。

相关文章:
  • 没有找到相关文章