Ошибка декларатора верхнего уровня, но программа выполняется правильно

#c #oop #gcc #codelite

#c #ооп #gcc #codelite

Вопрос:

У меня есть проект с несколькими файлами, включая main.cpp и два заголовка. В обоих заголовках ошибка в строке с объявлением имени класса. Сборка любого из файлов или проекта в целом не выдает ошибок или предупреждений. Сама программа выполняется правильно.

Я использую CodeLite IDE и компилятор GCC.

Что может быть причиной такого поведения и может ли это привести к каким-либо проблемам в будущем?

 #include <Creature.h>
#include <Party.h>

int main() { 
    // Does something with the stuff from header files.
    return 0;
}
  

Внутри Creature.h:

 #pragma once

class Creature { // Error: expected ';' after top level declarator
    // something
};
  

Внутренняя сторона.h:

 #pragma once

class Party { // Error: expected identifier or '('
    // something
};
  

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

1. Это на самом деле весь ваш код? Основываясь на ошибке, я предполагаю, что тип где-то не завершается точкой с запятой.

2. @Stephen Newell Да, это вся программа за вычетом содержимого скобок.

Ответ №1:

Ваша среда разработки считает, что файлы заголовков написаны на C (где class нет ключевого слова, и поэтому Creature является декларатором), потому что вы дали им обычное расширение, .h используемое для указания этого. Не делайте этого: используйте .hh , .hpp или .hxx для файлов заголовков C , чтобы инструменты (и люди) знали, что вы пишете, не разбираясь в файле.