Я читаю C ++ Primer, и автор говорит:
"Если класс определен внутри пространства имен, тогда в этом же пространстве имен объявляется необъявленная функция друга:
namespace A {
class C {
public:
friend void f(const C&); // makes f a member of namespace A
};
}
Разве это не означает, что мне не нужно снова объявлять функцию f () внутри пространства имен?
Когда я просто определяю функцию f () вне пространства имен как
void
A::f(const C& obj)
{
std::cout << "f(const C&) " << std::endl;
}
Я получаю ошибку от g ++ 4.5, говоря:
FriendDeclarations1.cpp:40:23: error: ‘void A::f(const A::C&)’ should have been declared inside ‘A’
Может кто-нибудь сказать, что подразумевает автор?