Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 需要帮助理解“的含义”;在嵌套模板参数列表中;GCC给出的错误_C++_Gcc_Stl - Fatal编程技术网

C++ 需要帮助理解“的含义”;在嵌套模板参数列表中;GCC给出的错误

C++ 需要帮助理解“的含义”;在嵌套模板参数列表中;GCC给出的错误,c++,gcc,stl,C++,Gcc,Stl,这包括: std::map vDescriptorAtom 这: std::map vDescriptorAtom 给出以下错误: src/MessageHandler.cpp:191:错误:>>应>>位于嵌套模板参数列表中 这显然是因为>是一个运算符。但是看着GCC抛出的错误,我无法理解它试图说什么。“嵌套模板参数列表”是什么意思。谢谢 你有学究模式吗?它告诉你“你本想写这个”。尽管较新版本的GCC(4.6…?)和C++11解决了这个问题 它知道你显然想写>,但如果它允许的话,它就不符合标准。

这包括:

std::map vDescriptorAtom

这:

std::map vDescriptorAtom

给出以下错误:

src/MessageHandler.cpp:191:错误:>>应>>位于嵌套模板参数列表中


这显然是因为
>
是一个运算符。但是看着GCC抛出的错误,我无法理解它试图说什么。“嵌套模板参数列表”是什么意思。谢谢

你有学究模式吗?它告诉你“你本想写这个”。尽管较新版本的GCC(4.6…?)和C++11解决了这个问题

它知道你显然想写
>
,但如果它允许的话,它就不符合标准。代码应该是可移植的,这是任何C++编译器都应该工作的。 模板中有一个模板,因此是嵌套的。这很好,它就像
列表
,一个int中某些事物的列表


这就是嵌套模板的含义。

外括号(1)之间的填充是
std::map
template的模板参数列表

std::map<int, std::vector<int>>
// (1)  ^                     ^
// (2)                   ^   ^
std::map
// (1)  ^                     ^
// (2)                   ^   ^
内部对(2)是
std::vector
模板的模板参数列表,它嵌套在第一个模板中,这就是错误所在


在C++11之前,结尾处的
>
之间必须有空格,以使解析器的工作更轻松(正如您所观察到的,它将被解释为右移运算符)。无论如何,许多编译器都努力正确地解析它,以便给出有意义的错误消息,这证明了这并非不可能。我想这就是C++11中放宽此限制的原因之一。

这里有一个嵌套的模板参数:

std::map<int, std::vector<int>>
        ^-outer---------------^
              ^-inner--------^
i、 例如,它将找不到相应的结束

这就是错误消息试图描述的内容,包括建议的修复。在幕后,编译器的这个建议意味着它实际上能够猜出你的意思,但是根据C++2003标准,它不允许猜,也不允许使用这种用法


在当前C++(C++ 11和更新版)中,允许第二次使用。

@下层选民,我想知道投票失败的原因,这样我就能提高答案。谢谢。请在标题中添加错误消息以提高搜索能力。一旦你这样做了,你会发现这是一个dup。用它自己的标题解释它。@RaymondChen这是一个类似的问题,但可以说他们提出了不同的问题。dup所问的问题是否真的是含糊不清的,这与这意味着什么不同。@ShafikYaghmour如果一个人问了一个问题,而这个问题是由另一个人的问题的设置来回答的,你会怎么做?e、 一个人问“我怎么做X?”另一个人问,“我用Y做X,我有一个问题……”这就是这里发生的事情。建议的dup说“当我们在另一个模板中使用模板时……”,它回答“嵌套模板意味着什么?”@RaymondChen我明白你的意思,但这两个问题的答案非常不同,所以我会说他们不是傻瓜,而他们有不同的想法,仍然有空间认为他们不是傻瓜,所以我对此持怀疑态度。你好,唐沃斯小姐。请你向我解释一下我做错了什么,好让我能在大考之前及时弥补这一污点吗?
[std] [::] [map] [<] [int] [,] [std] [::] [vector] [<] [int] [>>]
                open 1                           open 2           .... close?