【问题标题】:template parameters default value模板参数默认值
【发布时间】:2015-07-11 23:46:55
【问题描述】:

我正在尝试我的第一个模板。以下代码编译:

template<class T,class C=int> class MyClass
{};

但不是这个:

#include <vector>

using namespace std;
template<class T,class C=vector<T>> class MyClass
{};

但我看到标准向量类模板是这样声明的:

template < class T, class Alloc=allocator<T> > class vector
{};

编译器抛出的错误是:

*error: 虚假的 '>>',使用 '>' 来终止模板参数列表
*错误:模板参数列表中'class MyClass'的定义
*错误:“类型名称”声明中有两个或多个数据类型
*错误:预期在 ';' 之前有 '>'令牌
*error: ';' 之前的预期 unqualified-id令牌

【问题讨论】:

  • 也许你会从编译器中得到更好的错误信息。 error: 在连续的右尖括号之间需要一个空格(使用'> >') 我也假设你知道这个,但是error: no template named 'vector';你是说'std::vector'吗?
  • 您可能想在vector 之前添加std::
  • 如果你编译成C++11,应该可以不用空格的>>。

标签: c++ templates


【解决方案1】:

http://coliru.stacked-crooked.com/a/f93734d989e10446

不,它有效。您只是忘记了 std 命名空间。

【讨论】:

  • @coucou8949 不要这样做。如果库名称发生冲突,这会让人头疼。
  • @coucou8949 是的。你应该使用std::
  • 我删除了这个“使用命名空间标准;”照你说的做了。还是同样的错误。
  • 链接站点将其编译为 C++14。如果您使用常规的旧 C++98 进行编译,则必须编写 std::vector&lt;T&gt; &gt; 而不是 std::vector&lt;T&gt;&gt;
  • 错误:连续的直角括号之间需要一个空格(使用'> >')。我认为这就是问题所在。这就是编译器应该抛出的问题。有人应该发布一个正确的答案,这样我就可以让它成为正确的答案。
【解决方案2】:

代码是:

#include <vector>

using namespace std;
template<class T,class C=vector<T>> class MyClass
{};

但我应该写:

#include <vector>

template<class T,class C=std::vector<T> > class MyClass//with space between right angle brackets  : '> >'
{};

【讨论】:

  • 在 C++11 中删除了对空间的要求 - 考虑使用更新的编译器
猜你喜欢
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多