Неожиданная ошибка класса MSVS: не забыл точку с запятой, хотя

#c #class

#c #класс

Вопрос:

В моем коде ниже я получаю эту ошибку компилятора error C2236: unexpected 'class' 'Pawn'. Did you forget a ';'? Но, как вы можете ясно видеть, я не пропускаю точку с запятой… я? Раньше я думал, что это проблема из-за циклических зависимостей, но я удалил все включения рядом с вектором. Этот класс также должен был наследоваться от моего Piece класса, но даже после удаления этого я все еще получаю ошибку.

 #ifndef CHESS_PAWN_H
#define CHESS_PAWN_H

#include <vector>

class Pawn {
private:
    bool _hasMoved;

public:
    Pawn(int x, int y);
    ~Pawn();

    std::vector<int> availMoves();
};

#endif 
  

Есть какие-нибудь советы о том, что я здесь делаю не так?

Комментарии:

1. Происходит ли это в файле, который не содержит ничего, кроме этого заголовка?

2. Этот код выглядит хорошо и отлично компилируется в g . Если вы скомпилируете только этот код, вы получите те же ошибки? Скорее кажется, что предыдущее включение вызвало проблему.

Ответ №1:

Экстраполируя, вы chess.cpp файл может выглядеть следующим образом:

 #include "piece.h"
#include "pawn.h"
//etc..
  

Отсутствующая точка с запятой находится в файле piece.h. Стандартная ошибка препроцессора.

Комментарии:

1. Ого! Я никогда об этом не задумывался… Я просмотрел все свои файлы и обнаружил, что пропустил 2 точки с запятой. Поразмыслив, я вспомнил, что препроцессор копирует файлы .h при #include их использовании, так что это означает, что один из других файлов .h вызвал ошибку, но она не будет отображаться позже.

Ответ №2:

Это выстрел в темноте, но возможно ли, что заголовок «vector» не был случайно изменен в какой-то момент? Со мной это случилось, когда я случайно удалил строку или символ в файле заголовка, не заметив.

Опубликуйте содержимое, мы можем взглянуть и посмотреть, было ли оно изменено.