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

时间:2013-01-05 09:42:57

标签: 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

1 个答案:

答案 0 :(得分:5)

你似乎自己找到了规则。要找到,该函数必须具有类类型的参数。

请参阅维基百科的Argument Dependent Lookup