There is such code:
#include <iostream> 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(); }; void fun3(){ std::cout << "Im here3" << std::endl; } int main() { fun(A()); // works ok //fun2(); error: 'fun2' was not declared in this scope //A::fun2(); error: 'fun2' is not a member of 'A' fun3(); // works ok } How to access function fun2()?
Syntax of friend functions: class className{ // Other Declarations friend returnType functionName(arg list); }; As we can see above, the friend function should be declared inside the class whose private and protected members are to be accessed.
A friend function in C++ is defined as a function that can access private, protected and public members of a class. The friend function is declared using the friend keyword inside the body of the class.
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).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With