class A{
public:
friend void fun(A a){std::cout << "Im here" << std::endl;}
friend void fun2(){ std::cout << "Im here2" << std::endl; }
friend void fun3();
};
Although your definition of fun2
does define a "global" function rather than a member, and makes it a friend
of A
at the same time, you are still missing a declaration of the same function in the global scope itself.
That means that no code in that scope has any idea that fun2
exists.
The same problem occurs for fun
, except that Argument-Dependent Lookup can take over and find the function, because there is an argument of type A
.
I recommend instead defining your functions in the usual manner:
class A {
friend void fun(A a);
friend void fun2();
friend void fun3();
};
void fun(A a) { std::cout << "I'm here" << std::endl; }
void fun2() { std::cout << "I'm here2" << std::endl; }
void fun3();
Notice now that everything works (except fun3
because I never defined it).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…