2010-01-06 53 views
0

基本上我有代碼看起來像這樣的報頭文件中:聲明類的成員具有內部鏈接

class Bar; 
class Foo 
{ 
public: 
    Bar GetBar(); 
}; 

class Bar 
{ 
    Foo CreateFoo() {} 
}; 

Bar Foo::GetBar() 
{...} 

與此代碼的問題是,一旦報頭被包括在一個以上的文件中的鏈接器會抱怨Foo::GetBar有多個定義。然而,我不能把它放在類的定義裏面,因爲Bar在這個時候沒有定義。我不想把它放在一個單獨的.cpp文件中,因爲我正在編寫的庫的其餘部分(反正它不是那麼重),大部分模板我都必須放在一個頭文件中,而且看起來似乎有點討厭需要鏈接其他東西,因爲我不得不在頭之外添加一個函數。

因此,無論如何解決這個問題,而無需創建另一個.cpp文件?

回答

8
inline Bar Foo::GetBar() 
{...} 
+0

一個問題,因爲'inline'基本上是一個暗示,編譯器,但實際上並沒有強制編譯器內聯函數,這是否仍然有效,如果編譯器決定不內聯它? – 2010-01-06 17:36:16

+3

@Matthieu:它也給出了函數「內聯」,這基本上意味着你可以有多個定義(只要它們都是相同的)。 – 2010-01-06 17:49:39

0

你可以聲明這個Foo::GetBar()函數內聯。我應該解決多重定義。

0

使函數明確直列:雖然

inline Bar Foo::GetBar() 
{...}