為什么我的包含保護不阻止遞歸包含和多個符號定義?兩個常見問題包括警衛:第一個問題:為什么不包括保護我的頭文件的警衛相互的、遞歸的包含?每當我寫下面這樣的東西時,我總是會收到關于不存在的符號的錯誤,這些符號顯然是存在的,甚至是更奇怪的語法錯誤:“A.H”#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_Hint f(){
return 0;}#endif // HEADER_H“Source1.cpp”#include "header.h"...“Source2.cpp”#include "header.h"...為什么會發生這種事?我需要做些什么來解決我的問題?
2 回答
弒天下
TA貢獻1818條經驗 獲得超8個贊
grep -rh "#ifndef" * 2>&1 | uniq -c | sort -rn | awk '{print $1 " " $3}' | grep -v "^1\ "提示:
- 2 回答
- 0 關注
- 438 瀏覽
添加回答
舉報
0/150
提交
取消
