这让我感到惊讶。这工作: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()'的内联声明找不到) –
什么样的命名约定会导致到一个成员变量和一个朋友函数共享一个名字?这是你真正需要解决的问题。 –