Я работаю над моим SDL игровым проектом с использованием Ubuntu .Я создал заголовок (объявление) и его файл cpp (определение).И что-то начало меня беспокоить, пожалуйста, пролите немного света.
Что работает и что у меня есть:
(Все 3 файла находятся в одной папке)
motion.h:
#include <SDL2/SDL.h>
class Movement{ ...... };`
motion.cpp:
#include <SDL2/SDL.h>
#include "movement.h"
// Every Definition
main.cpp:
#include <SDL2/SDL.h>
#include "movement.h"
...... // contents
Компиляция:
$ g++ main.cpp movement.cpp movement.h -lSDL2 -lSDL2_image
Что НЕ СЛЕДУЕТРабота (с включенным охранником):
(я только изменил motion.cpp, остальные остались прежними)
motion.cpp:
#include <SDL2/SDL.h>
#ifndef MOVEMENT_H
#define MOVEMENT_H
...... // contents
#endif
Ошибка: компилятор жалуется, что не может ничего распознатьот motion.hНапример:
......
movement.cpp: At global scope:
movement.cpp:73:6: error: ‘Movement’ has not been declared
......
Мои вопросы:
1) Почему мой включаемый охранник (в movement.cpp
) не работает? Я предполагал, что в него будет включен файл motion.h (когда его еще нет).
* Использование include guard для <SDL2/SDL.h>
также не работает (компилятор выдаёт ", не был объявлен")." ошибка ).Код выглядит так:
#ifndef SDL2_SDL_H
#define SDL2_SDL_H
......
#endif
2) Почему <SDL2/SDL.h>
не нужен охранник включения? Очевидно, что один включен в movement.h
, а другой в main.cpp
.Не должно ли быть двойное включение ошибка?