基本上我有代碼看起來像這樣的報頭文件中:聲明類的成員具有內部鏈接
class Bar;
class Foo
{
public:
Bar GetBar();
};
class Bar
{
Foo CreateFoo() {}
};
Bar Foo::GetBar()
{...}
與此代碼的問題是,一旦報頭被包括在一個以上的文件中的鏈接器會抱怨Foo::GetBar
有多個定義。然而,我不能把它放在類的定義裏面,因爲Bar在這個時候沒有定義。我不想把它放在一個單獨的.cpp文件中,因爲我正在編寫的庫的其餘部分(反正它不是那麼重),大部分模板我都必須放在一個頭文件中,而且看起來似乎有點討厭需要鏈接其他東西,因爲我不得不在頭之外添加一個函數。
因此,無論如何解決這個問題,而無需創建另一個.cpp文件?
一個問題,因爲'inline'基本上是一個暗示,編譯器,但實際上並沒有強制編譯器內聯函數,這是否仍然有效,如果編譯器決定不內聯它? – 2010-01-06 17:36:16
@Matthieu:它也給出了函數「內聯」,這基本上意味着你可以有多個定義(只要它們都是相同的)。 – 2010-01-06 17:49:39