【发布时间】:2020-09-16 12:15:56
【问题描述】:
我在命名空间中声明了一个函数,当它被定义为友元时,会引发编译器错误。
#include <string>
#include <vector>
namespace Example
{
std::vector<std::string> GetNames();
}
class MyClass
{
public:
MyClass() :
name("data")
{}
private:
std::string name;
friend std::vector<std::string> ::Example::GetNames();
};
编译失败,报错
'class std::vectorstd::__cxx11::basic_string' 中的 'Example' 没有命名类型 朋友 std::vectorstd::string ::Example::GetNames(); ^~~~~~~ main.cpp:25:2: 错误:预期 ';'类定义后
然而,如果我从::Example::GetNames() 中删除全局命名空间标识符::,它将顺利编译。
当由于嵌套命名空间而需要从全局命名空间开始时,我该如何处理这个问题?
【问题讨论】: