C++ yyy中的错误xxx未命名类型

C++ yyy中的错误xxx未命名类型,c++,c++11,compiler-errors,g++,c++14,C++,C++11,Compiler Errors,G++,C++14,编译文件错误\u xxx\u不\u命名\u类型.cpp,为什么会出现错误 error\u xxx\u没有命名类型。cpp:5:28:error:“struct std::pair”中的“a”没有命名类型std::pair::a::B::C::D::get\u i() //错误\u xxx\u未\u命名\u类型。h #布拉格语一次 #包括 命名空间A{命名空间B{命名空间C{ 结构D { std::pair get_i(); std::pair get_j(); std::pair get_

编译文件
错误\u xxx\u不\u命名\u类型.cpp
,为什么会出现错误
error\u xxx\u没有命名类型。cpp:5:28:error:“struct std::pair”中的“a”没有命名类型std::pair::a::B::C::D::get\u i()

//错误\u xxx\u未\u命名\u类型。h
#布拉格语一次
#包括
命名空间A{命名空间B{命名空间C{
结构D
{   
std::pair get_i();
std::pair get_j();
std::pair get_k();
int get_l();
};  
}}}

//错误\u xxx\u未\u命名\u a\u type.cpp
#包括“错误\u xxx\u不\u名称\u类型.h”
#如果1//给了我错误
std::pair::A::B::C::D::get_i()
{返回{true,10};}
#恩迪夫
//但下面这些都不行
//失踪::
std::pair A::B::C::D::get_j()
{返回{true,10};}
//尾随返回类型
自动::A::B::C::D::get_k()->
std::pair
{返回{true,10};}
//返回类型int
int::A::B::C::D::get_l()
{返回10;}
我使用
g++-Wall-Wextra-std=c++14-c error\u xxx\u not\u name\u a\u type.cpp
g++(Ubuntu 5.3.0-3ubuntu1~14.04)5.3.0 20151204
,因为
(空格)在这个上下文中是不相关的,
用作范围解析运算符,应用于
std::pair

对于编译器

std::pair<bool, int>::A...
std::pair::A。。。

std::pair<bool, int>:: A...
std::pair<bool, int> ::A...
std::pair::A。。。

std::pair<bool, int>:: A...
std::pair<bool, int> ::A...
std::pair::A。。。

std::pair<bool, int> :: A...
std::pair::A。。。
因此,编译器在
std::pair
的范围内寻找一个
A
,它显然失败了

请参阅:

这是一个更简洁的复制示例:

struct T{};
T A();
T ::A() { return T(); }

// error: no 'int T::A()' member function declared in class 'T'
(请注意GCC尝试将自动-
int
返回类型作为C的保留!)

<>这是C++的怪癖。您混淆了解析器,因为它看起来像是在尝试使用
std::pair::A::B::C::D
,而这显然是不存在的。(这里忽略了空格,尽管我们习惯于这样写。)


只需省去
。对于函数定义,您无论如何都不需要它。

解释,但不需要solution@LightnessRacesinOrbit:是的,那又怎样?问题是:“为什么我会出错……”。无论如何,问题中都提供了解决办法。令人惊讶的是,没有一个高投票率的人被愚弄。