ожидаемое имя класса до '{' токена - PullRequest
4 голосов
/ 26 августа 2011

Я получаю ошибку "ожидаемое имя класса перед '{' токеном" в моем проекте C ++ Qt.После поиска в Google, кажется, что проблема круговых включает.У меня есть 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 ]

4 голосов
/ 26 августа 2011

Вместо случайных попыток, попробуйте изменить board.h, чтобы включить предварительные объявления для всех частей:

board.h

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

И удалить соответствующих #include операторов. (Вам, вероятно, понадобится поместить эти #include операторы в board.cpp, когда вы решите, что вам нужно увидеть различные классы элементов.)

1 голос
/ 26 августа 2011

Ваша основная проблема лежит в файле: piece.h.Поскольку board явно не упоминается в файле, include для него и для предварительного объявления следует удалить.Это разорвет круг.Кроме того, как указал Грег , в board.h необходимы только предварительные объявления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...