3

我写了以下代码:

#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

4

1 回答 1

5

您似乎已经找到了自己的规则。要被发现,函数必须有一个类类型的参数。

请参阅Wikipedia 上的参数相关查找

于 2013-01-05T09:47:34.920 回答