次のコードを書きました。
#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 です