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:是的,那又怎样?问题是:“为什么我会出错……”。无论如何,问题中都提供了解决办法。令人惊讶的是,没有一个高投票率的人被愚弄。