希望在命名空间中使用friend函数,但不要使用整个类
want friend function in namespace, but not the whole class
这是命名空间中友元函数的后续问题
如果我希望testFunc位于命名空间TestNamespace中,但我不希望TestClass也位于TestNamespace,我如何声明它们?
1.这不起作用(第2行"命名空间前应为非限定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是友元。
我不知道这些案件中发生了什么。任何见解都将不胜感激。谢谢
尝试使用前向声明:
class TestClass;
namespace TestNamespace {
void testFunc(TestClass &myObj);
}
class TestClass {
friend void TestNamespace::testFunc(TestClass &myObj);
};
我不知道在你最初的例子中"leda"是什么,但希望你能用上面给出的任何名字来代替。
您可以让它变得简单:
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
};
请记住,命名空间主体只能在全局范围内(不能在类或函数内)。
相关文章:
- 在命名空间中定义函数还是限定函数
- CUDA内核和数学函数的显式命名空间
- 在命名空间中使用全局命名空间中的函数
- 是否可以将函数导入命名空间,但不能导出它?
- 使用另一个命名空间中的函数C++
- Visual Studio 无法解决类和命名空间中重载的明确函数
- 命名空间更改函数定义
- C++命名空间中调用 void 函数的错误
- C++ 17 个友元函数声明和内联命名空间
- MFC 函数来自 :: 命名空间?
- 在命名空间内使用函数的循环包含
- 在命名空间中使用指令和函数重载
- 命名空间中未引用的函数
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- cgo调用C++中定义的函数(位于命名空间中)
- c++ 内联友元函数是否会导致命名空间之间的名称隐藏?
- 在命名空间内部还是外部实现 c++ 函数?
- 如何在命名空间中正确调用此函数?c++
- 在同一函数中使用不同的命名空间
- 如何从嵌套在命名空间中的类调用成员函数?