我想在頭文件中包含C++類的定義和實現。爲頭文件中的類實現防止「已定義」錯誤
我正在創建一個需要C兼容的庫。 .h文件定義了一個C++類,可以通過C++類訪問庫。它也在圖書館內部使用。
由於頭文件被導入到幾個子類,我總是得到「多重定義」錯誤。因爲類定義應該是庫的用戶可導入的,所以我不想將這個實現移到一個單獨的cpp文件中。
你有什麼想法可以解決這個問題嗎?
簡單的例子:
//library:
typedef struct IFoo{
virtual void foo = 0;
};
void library_fun_a(IFoo*);
void library_fun_b(IFoo*);
//header file
#pragma once
class FooWrapper : public IFoo{
virtual void foo() override;
};
void FooWrapper::foo(){
//some magic here
}
[編輯]使用包括警衛,無助於從包括在所有目標文件執行情況,並因此遭遇「多重定義」錯誤鏈接停止編譯。
你錯過在提供[包括警衛(http://en.wikipedia.org/wiki/Include_guard)你的頭文件? –
如果您創建了一個庫,它通常由.h文件組成,並將該實現組成爲包含.o文件的lib *。因此,試圖避免單獨的.c或.cpp文件沒有意義。 – laune
你爲什麼要用這種方式提供實現,而不是用聲明內聯?否則,將實現分離爲額外的編譯單元(如往常一樣)。 –