2010-01-06 54 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() 
{...}