У меня есть C++ файл как этотв C++, что особенного в «_MOVE_H»?
#ifndef _MOVE_H
#define _MOVE_H
class Move {
int x, y;
public:
Move(int initX = 0, int initY = 0) : x(initX), y(initY) {}
int getX() { return x; }
void setX(int newX) { x = newX; }
int getY() { return y; }
void setY(int newY) { y = newY; }
};
#endif
И к моему удивлению, весь код между #ifndef
и #endif
просто игнорируется компилятором (я клянусь, что я не определяя _MOVE_H
где-либо еще), и у меня есть всевозможные ошибки в отношении отсутствующих определений. Я думал, что сделал что-то не так, но когда я пытаюсь использовать другой ключ (например, _MOVE_Ha
, все возвращается к норме. _MOVE_H
что-то особенное в C++?
Я запускаю Ubuntu 10.04, GCC 4.4.3 , если это имеет значение
Спасибо,
Возможно, это один из файлов библиотеки, в который вы включаете, используя его для своего охранника включения? ты это проверил? Кстати, я обычно префикс его с именем проекта, чтобы избежать такого типа проблемы. – Naveen
Другая причина использования '#pragma once' вместо' # define' включает в себя защиту ... – Inverse
@Inverse, '#pragma once' является расширением компилятора и не поддерживается всеми компиляторами. Включить охранники - единственный безопасный независимый от компилятора способ предотвращения множественного включения. –