.**件被多次定義或.o:第一次在此定義問題
場景一:函式在標頭檔案被定義,參看
場景二:標頭檔案中定義的型別、結構體被例項化
例如:
struct har
h[2];
在定義結構體同時還定義結構體型別變數h,若該標頭檔案被多次包含,則可能報錯:
g++ -std=c++11 -g main.o aa.o bb.o -o aa
aa.o:(.bss+0x0): `h'
main.o:(.bss+0x0):第一次在此定義
bb.o:(.bss+0x0): `h'被多次定義
main.o:*/main.cpp:6:第一次在此定義
collect2: error: ld returned 1 exit status
makefile:9: recipe for target 'aa' failed
make: *** [aa] error 1
將函式實現放在標頭檔案中
因為多個原始檔包含了含有函式定義的標頭檔案,在編譯的時候,每個原始檔都會包含乙份函式定義,在鏈結時編譯器不知道需要連線哪乙份函式定義。解決方法有三個 1.inline關鍵字 可以用關鍵字inline修飾函式定義,例如 inline int add int x,int y 使用inline關鍵字,編譯...
inline函式的定義放在標頭檔案中
inline是加在實現上,就算加在宣告上,編譯器也會忽略掉。內聯展開是在編譯時進行的,只有鏈結的時候原始檔之間才有關係。所以內聯要想跨原始檔必須把實現寫在標頭檔案裡。如果乙個 inline 函式會在多個原始檔中被用到,那麼必須把它定義在標頭檔案中。注意 將函式的定義 之間的部分 放在標頭檔案中是強制...
ctype標頭檔案所包含的函式
include 的函式 c 中應該是 include c中應該是 include 以下為字元函式庫中常用的函式 函式名稱 返回值isalnum 如果引數是字母數字,即字母或數字,該函式返回true isalpha 如果引數是字母,該函式返回真 isblank 如果引數是空格或水平製表符,該函式返回t...