这是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/

10-11 15:42