Я уже некоторое время использую библиотеки allegro 5 для разработки игры на C ++. Сегодня я получил странную ошибку:
У меня есть класс под названием level
, У меня есть файл заголовка levelhandler
,
Вот как это выглядит:
#pragma once
#include "level.h"
level level_1;
level *currentlevel;
void initialize_levels()
{
currentlevel = &level_1;
}
Когда я пытаюсь скомпилировать, это дает мне странные ошибки, такие как:
error C2086: 'int level' redefinition
error C2143: syntax error : missing ; before 'level_1'
Я помню, что он мог скомпилировать раньше, и я использовал currentlevel->Player.X
много раз, но теперь у меня есть много таких, и это дает такие ошибки:
error C2227: left of '->Player' must point to a class/struct/generic type
error C4430: missing type specifier - int assumed
заголовок вставлен из комментария
#pragma once
#include "entity.h"// some more includes
class level {
public:
enum Tileset { ... };
enum Tile { ... };
int tiles[200][200];
player Player;
level(void);
~level(void);
};
Такие ошибки трудно найти, если вы посмотрите на панель «Список ошибок». Выберите View / Output, чтобы показать представление «Output». Строка после ошибки C2086 показывает исходное определение уровня.
Вы заполняете найти
int level;
там, как говорит вам C2086. Если это линия
level level_1;
из вашего первого примера вы должны будете проверить последний заголовочный файл, включенный в ваш модуль компиляции. Это может закончиться int
или имеет несбалансированный #if
пункт.
Чтобы найти точное местоположение, начните использовать Короткий, Автономный, Правильный (Компилируемый), Пример. Это поможет вам найти ошибку и сэкономит время других благодаря своим хрустальным шарам.
Редактировать:
Другой способ выяснить причину этого неожиданного поведения — увидеть выходные данные препроцессора. Установить Generate Preprocessed File
опция на странице свойств проекта C / C ++ / Preprocessor для With line numbers (/P)
и посмотри в сгенерированном <sourcefile>.i
Убедитесь, что этот файл level.h содержит то, что вы хотели.
Итак, я возился с моим проектом на выходных, и я наконец-то узнал, в чем заключается проблема, которая вызвала у меня столько странных ошибок компилятора. Кажется, у меня было много случаев, когда два заголовочных файла включали друг друга, и компилятору это действительно не нравилось, поэтому я исправил это, и теперь я в порядке. Спасибо всем за помощь и хорошего дня!