Два распространенных вопроса о включают охранников:
-
ПЕРВЫЙ ВОПРОС:
Почему не включить защитников моих файлов заголовков из взаимного, рекурсивного включения? Я продолжаю получать ошибки о несуществующих символах, которые, очевидно, существуют или даже более странные синтаксические ошибки каждый раз, когда я пишу что-то вроде следующего:
"хиджра"
#ifndef A_H #define A_H #include "b.h" ... #endif // A_H
"b.h"
#ifndef B_H #define B_H #include "a.h" ... #endif // B_H
"main.cpp"
#include "a.h" int main() { ... }
Почему возникает ошибка компиляции "main.cpp"? Что мне нужно сделать, чтобы решить мою проблему?
-
ВТОРОЙ ВОПРОС:
Почему не включены защитники, предотвращающие несколько определений? Например, когда мой проект содержит два файла, которые содержат один и тот же заголовок, иногда компоновщик жалуется, что некоторый символ определен несколько раз. Например:
"header.h"
#ifndef HEADER_H #define HEADER_H int f() { return 0; } #endif // HEADER_H
"source1.cpp"
#include "header.h" ...
"source2.cpp"
#include "header.h" ...
Почему это происходит? Что мне нужно сделать, чтобы решить мою проблему?