这是friend function within a namespace的后续问题
如果我想将testFunc放在 namespace TestNamespace中,但又不想在TestNamespace中使用TestClass,如何声明它们?
1.这不起作用(第2行上的“ namespace 前的预期非限定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行的 friend 函数声明中没有“TestNamespace::”,则上面的代码还可以,但是我不确定它是否知道TestNamespace::testFunc是 friend 。
我不知道在这些情况下发生了什么。任何见解也将不胜感激。谢谢!
最佳答案
尝试使用前向声明:
class TestClass;
namespace TestNamespace {
void testFunc(TestClass &myObj);
}
class TestClass {
friend void TestNamespace::testFunc(TestClass &myObj);
};
我不知道您的原始示例中的“leda”是什么,但希望您可以根据上面的描述替换您需要的任何名称。
关于c++ - 需要命名空间中的 friend 功能,而不是整个类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6301599/