这是friend function within a namespace
的后续问题如果我希望testFunc位于命名空间TestNamespace中,但我不想在TestNamespace中使用TestClass,我该如何声明它们?
1.这不起作用(“第2行的”命名空间之前的预期unqualified-id“)
class TestClass {
namespace TestNamespace {
friend void testFunc(TestClass &myObj);
};
}
namespace TestNamespace {
void testFunc(TestClass &myObj);
}
2.但是当我这样做时,它抱怨“TestNamespace :: testFunc(...)应该在'TestNamespace'中声明 -
class TestClass {
friend void TestNamespace::testFunc(TestClass &myObj);
}
namespace TestNamespace {
void testFunc(TestClass &myObj);
}
3.如果我在第2行的友元函数声明中没有“TestNamespace ::”,上面的代码是可以的,但是我不确定它是否知道TestNamespace :: testFunc是朋友。
我不知道在这些案件中发生了什么。任何见解也会非常感激。谢谢!
答案 0 :(得分:2)
尝试使用前向声明:
class TestClass;
namespace TestNamespace {
void testFunc(TestClass &myObj);
}
class TestClass {
friend void TestNamespace::testFunc(TestClass &myObj);
};
我不知道你原来的例子中有什么“leda”,但希望你可以用上面提到的任何名字代替。
答案 1 :(得分:1)
你可以简化:
class TestClass; // forward declaration
namespace TestNamespace { // namespace body
void testFunc(TestClass &myObj); // passing by reference, ok!
}
class TestClass {
friend void TestNamespace::testFunc(TestClass &myObj); // scoping with namespace
};
请记住,名称空间主体只能在全局范围内(不在类或函数内)。