1樓:任黑
你這情況至少可以肯定不是開源的庫。
誰寫的,把ta打一遍。
既然不能編譯,那肯定是類外的函式了,因為類內的都是內聯的。
採用Single-file library的寫法:
//這裡寫函式宣告
#ifdef IMPLEMENTATION//這裡寫函式實現
#endif
然後僅在包含該檔案的乙個cpp中,在包含該檔案前#define IMPLEMENTATION
2樓:C十十20年
參見《C++設計精要教程》關於變數、函式說明和定義的區別,不應在.h和.hpp檔案中進行變數或函式定義。
如果.h或.hpp僅包含變數和函式說明,即使在乙個.
cpp檔案中,連續包含同乙個.h檔案多次,也是可以的,因為變數可以重複說明多次。例如,你可以在乙個.
cpp檔案中連續寫二個extern int x; extern int x; 但是,變數定義只能進行一次,因此,只能在乙個.cpp檔案中,對某.h檔案使用#include僅一次;而不同的.
cpp對某.h檔案使用#include,也會造成同一變數被定義多次,這在編譯連線階段會出錯。
如果在.h檔案中,在變數或函式定義前加上static或者inline,將使每個.cpp定義檔案級作用域的變數或函式一次。
特別地,如果你的程式通過include定義了多個檔案作用域的相同功能的同名函式,將使你的程式變得又臭又長,這恐怕是不值得的。
3樓:杜紫童
兩個辦法:
類成員;
inline。
PS,這兩個其實是同乙個辦法,類成員永遠inline。
PS2, C++的inline跟C的inline含義不同,不要混淆。
C 繼承模板類 引數是子類 替代虛函式。模板類只能訪問子類公共成員,受保護的不行?
Jon Lee 這是CRTP curiously recurring template pattern,https en.m.wikipedia.org wiki Curiously recurring template pattern 通過把建立虛函式表vtable的過程搬到編譯時間來提高效率。對...
C 如何在類中定義乙個 C 函式(不用傳遞 this,非友元,非靜態)?
悽臨雨 無捕獲的lambda,可以轉型為c函式指標。類內巢狀類可以定義靜態函式 不一定合乎要求 但據我所知都只能獲取指標,沒辦法定義c函式 因為c函式應當處在c的命名空間中 陸海綿 使用函式指標成員指向乙個類外定義的C函式。extern c class Avoid p int 實在想不到哪種應用場景...
為什麼C 中自定義函式與Linux系統呼叫同簽名,卻仍然可以編譯
H 0214 可以自定義strlen啊。當你include cstring標頭檔案,預處理之後有了有了strlen的宣告 因為你又寫了strlen的定義,所以strlen是本模組定義的符號,在編譯的時候就已經生成了機器碼。鏈結器不會再鏈結庫裡的那個版本。 gcc 在編譯的時候,是有一些 潛規則的 我...