what’s wrong with this code?
class matrix{
private:
friend transpose(const matrix&);
friend class invert;
public: //...
};
matrix (*p)(const matrix&)=&transpose; //error: no transpose() in scope.
what does the statement means “a friend declaration does not introduce a name into enclosing scope”.This problem does not occur when friend keyword is removed
The difference between the declaration of transpose() as a friend and without the friend declaration is that if you declare “friend transpose()” all you are doing is telling the compiler that a function friend with the signature shown in the friend declaration can have access to the private members of an object of type matrix. It does not declare a function transpose() with this signature – you still have to do this outside the scope of the matrix class.
If you remove the ‘friend’ keyword, you are declaring a member function transpose() inside the class matrix, so the compiler actually has seen a function it can take the address of.