#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» не был случайно изменен в какой-то момент? Со мной это случилось, когда я случайно удалил строку или символ в файле заголовка, не заметив.
Опубликуйте содержимое, мы можем взглянуть и посмотреть, было ли оно изменено.