3
我想使一個類的友元函數從一個全局命名空間,這似乎是做工精細,除非友元函數使用自定義的返回類型是這樣的:友元函數
typedef int Type;
Type myFunction();
namespace foo {
class Foo
{
public:
friend Type ::myFunction();
private:
void bar() {}
};
}
Type myFunction()
{
foo::Foo a;
a.bar();
return 0;
}
如果int
代替Type
代碼編譯,但與typedef
編譯器似乎並沒有分開命名空間中的類型,並給出了一個錯誤:
error: expected a class or namespace
friend Type ::myFunction();
^
error: C++ requires a type specifier for all declarations
friend Type ::myFunction();
我使用鐺++ 500 。 2.79在OS X上。 我可以使用#define
而不是typedef
作爲示例中的解決方法,但是在我的現實世界問題中,自定義類型來自另一個無法更改的頭文件。 任何幫助,將不勝感激。
編譯得很好[至少在Ideone(GCC)](http://ideone.com/5wLR5y)。真的好像是[clang特定問題](http://coliru.stacked-crooked.com/a/2d7ccf99e0ca5d1b)。 –
同樣的問題,我用gcc 4.9.2-6,awesomeyi的答案爲我解決了它.. 這是一個錯誤? – frans