#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 ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__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) для обработки только заголовка.