数字常量之前的预期不合格 id

Posted

技术标签:

【中文标题】数字常量之前的预期不合格 id【英文标题】:expected unqualified-id before numeric constant 【发布时间】:2011-05-26 18:23:59 【问题描述】:
template <int K>
class Wrap

   // stuffs
;

如果我实例化像Wrap &lt; 5&gt;4 &gt; p; 这样的模板有什么问题? 我得到 expected unqualified-id before numeric constant 错误。如何解决这个问题?

【问题讨论】:

【参考方案1】:

Wrap &lt; 5&gt;4 &gt; p; 更改为Wrap &lt; (5&gt;4) &gt; p;

遇到的第一个&gt;被视为模板参数列表的末尾而不是大于运算符&gt;

ISO C++ [14.2/3]

解析template-id时,将第一个非嵌套的&gt;作为模板的结尾 参数列表而不是大于运算符。

【讨论】:

【参考方案2】:

如果我实例化像Wrap &lt; 5&gt;4 &gt; p; 这样的模板有什么问题?

只要看一下这句话就应该很明显:即使对人类来说,它也令人困惑!编译器无法处理这里&gt; 的双重含义:它的意思是“大于”吗?这是否意味着“关闭模板参数列表”?原来,它的意思是both,编译器没有提示在哪里应用哪个含义。两者都是技术上有效的解析。

【讨论】:

【参考方案3】:

模棱两可。请改用 Wrap4)>。

【讨论】:

以上是关于数字常量之前的预期不合格 id的主要内容,如果未能解决你的问题,请参考以下文章