內聯函數不是在調用時發生控制轉移,而是在編譯時將函數體嵌入在每一個調用處。
今天在coding時遇到多次定義一個函數而使ld返回錯誤的情況。大致過程如下:
首先,在一個頭文件中定義了一個類及其實現:
test.h:
- #ifndef TEST_H
- #define TEST_H
- class A{
- public:
- void fun();
- };
- void A::fun(){
- }
- #endif
然後分別有兩個文件:
a.cpp:
- #include"test.h"
- void tt()
- {
- }
b.cpp:
- #include<iostream>
- #include"test.h"
- using namespace std;
- void tt();
- int main()
- {
- A a;
- tt();
- return 0;
- }
而後,將a和b分別編譯之後就會出錯:
想了想,是由於分開後在a.o和b.o中都分別定義了A的fun()函數,因此會發生沖突。