我写了以下代码:
#include<iostream>
using namespace std;
class foo {
private:
int i;
public:
foo(): i(1) { }
friend int func1(int i) {
return 0;
}
friend int func2(foo &f) {
return f.i;
}
};
int main()
{
foo f;
cout << func2(f) << endl;
cout << func1(1) << endl;
return 0;
}
但它无法编译时出现以下错误:
ss.cpp: In function ‘int main()’:
ss.cpp:28:17: error: ‘func1’ was not declared in this scope
当我删除这一行时:
cout << func1(1) << endl;
它编译成功
这是否意味着如果我想在类中定义友元函数并在全局命名空间中调用它,它必须与类有一些关系?如果是这样,详细规则是什么?
我的编译器是g -4.7.2
解决方法:
你似乎自己找到了规则.要找到,该函数必须具有类类型的参数.
请参阅*的Argument Dependent Lookup.