這讓我感到驚訝。這工作:C++內聯朋友函數與成員變量名稱相同
struct foo {
int x;
friend int x(foo f) { return f.x; }
friend int y(foo f);
};
int y(foo f) { return x(f); } // no problem
但是,這是一個錯誤:
struct foo {
int x;
friend int x(foo f) { return f.x; }
friend int y(foo f) { return x(f); } // error: invalid use of foo::x data member
};
爲什麼沒有這兩個(DIS)的允許?
是否返回:: x(f);'工作?這應該明確引用全局名稱空間中的'x()'。 (如果'x()'不在全局命名空間中,則嘗試':: the :: namespace :: x(f)'。) – cdhowie
@cdhowie:「未找到**的朋友的名字**查找**或通過合格的查找**直到在該名稱空間範圍內提供匹配聲明「。依賴於參數的查找是找到它的唯一方法,或者在類的上方添加一個聲明(因爲下面的類爲'friend int y()'的內聯聲明找不到) –
什麼樣的命名約定會導致到一個成員變量和一個朋友函數共享一個名字?這是你真正需要解決的問題。 –