ошибка c : ожидаемый ‘=’, ‘,’, ‘;’, ‘ asm’ или ‘__attribute__’ перед ‘secret’

#c

#c

Вопрос:

Я не понимаю, где находится эта ошибка. Я потратил несколько часов на то, чтобы просто попытаться разобраться в этом, но безуспешно. Используя g , мой компилятор выделяет class secret.

 #ifndef ENEMIES_H
#define ENEMIES_H


class secret {
private:
int damage;
int accuracy;
int hlth;
public:
int attack(int x);
int health(int x);
};
#endif
  

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

1. Что предшествует этому? Вы включили какой-то другой файл и забыли точку с запятой?

2. @user699647: Должно быть, это ваши враги … не include используйте их в процессе кодирования в следующий раз…

3. Я включил заголовок в другой файл, но в нем нет пропущенных точек с запятой, которые я или компилятор могли бы обнаружить.

Ответ №1:

Вы компилируете его с помощью компилятора C, а не C . Пример:

 $ cc -c -o example.o example.c
example.c:5: error: expected ‘=’, ‘,’, ‘;’, ‘asmor ‘__attribute__’
before ‘secret’
make: *** [example.o] Error 1
$ mv example.c example.cpp
$ cc -c -o example.o example.cpp
$
  

Скорее всего, вы сделали именно то, что показано в приведенном выше примере — назвали файл с .c расширением, а не с .cpp или a .C или любым другим расширением, которое GCC будет использовать, чтобы решить, что ваш файл написан на C . Вы можете использовать -x флаг для обхода этой ошибки, если вы не хотите изменять свое имя файла:

 $ cc -x c   -c -o example.o example.c
$
  

Использование clang вместо GCC дает лучшие сообщения об ошибках, но те же результаты:

 $ clang -c -o example.o example.c
example.c:5:1: error: unknown type name 'class'
class secret {
^
example.c:5:13: error: expected ';' after top level declarator
class secret {
            ^
            ;
2 errors generated.
$ clang -x c   -c -o example.o example.c
$
  

Но еще лучше:

 $ clang   -c -o example.o example.c
clang  : warning: treating 'c' input as 'c  ' when in C   mode, 
this behavior is deprecated
$
  

Который работает, но точно объясняет вашу проблему.

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

1. Это файл заголовка для файла .cpp. Я полагаю, что при компиляции я использую g , а не gcc, я могу ошибаться.

2. @user699647 — какую командную строку вы используете для компиляции этого файла? Как вы можете видеть, ваша ошибка точно совпадает с тем, что происходит при попытке скомпилировать ваш пример кода с помощью компилятора C.

3. Я использую Geany, простую ide. Я нахожу командную строку немного утомительной, мне нравится иметь кнопку для быстрой компиляции. Однако я использовал ваш пример кода для командной строки, и по какой-то странной причине он удалил весь мой код.

4. @user699647, вы могли бы попробовать заглянуть в make , если хотите удобства, но все же сможете узнать о том, как работает компилятор на более непосредственном уровне. В любом случае, ваша IDE выполняет какую -то операцию командной строки для выполнения компиляции, и она должна где-то предоставить вам эту команду.

5. Тогда я робко проверю, разберусь. Я только начал c несколько недель назад и программировать в целом несколько месяцев назад, и я едва добрался до конструкторов и заголовочных файлов. Хорошо, значит, это ошибка компиляторов, или я перепутал свои расширения, или мне следует посмотреть другие файлы, которые содержали заголовок?

Ответ №2:

Я думаю, проблема в том, что суффикс вашего файла класса равен *.c, а не *.cpp, вы меняете суффикс на *.cpp. удачи ~

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

1. Это должен быть комментарий, а не ответ.

Ответ №3:

Ошибка может возникать даже с .cpp расширением файла, когда в .h разделе ЗАГОЛОВКОВ есть правильная .pro запись, но .cpp она пропущена в исходных текстах.

Обычно, когда file.h копируется и вставляется в исходные файлы без изменения расширения, в этом случае команда ‘make’ также создает запись (CC) в makefile вместо (CXX) для обработки только заголовка.