c – 在类中实现并在全局命名空间中调用的friend函数

我写了以下代码:

#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.

上一篇:微信好友数据分析及可视化


下一篇:c 11 std :: thread和class friend函数之间的交互