c++ - '{' 标记之前的预期类名

标签 c++ qt

我在我的 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/

相关文章:

c++ - Lua 垃圾收集和 C 用户数据

c++ - 水平排列 QMenu 项目

c++ - 包含库时找不到 Qt shared_ptr

c++ - 如何在不使用 return 的情况下从函数中获取变量的地址(指针)

c++ - Cygwin 的 cmake 与 CMAKE_SYSTEM_NAME 不匹配

c++ - reference_wrapper 引用原语

c++ - C++中的unordered_set是否存在任何顺序?

css - 如何访问设置的 qt 样式表属性(像语法一样的 css),或者是否有 css 到 xml 转换器?

c++ - Qt 中的背景乘以而不是适应窗口大小

qt - 我们可以生成抽象的 Qt D-Bus 适配器类吗?