2015-07-11 257 views
0

我想我的第一个模板。下面的代码编译:模板参数默认值

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:spurious'>>',使用'>'终止模板参数列表
*错误:模板参数列表中的'class MyClass'的定义
*错误:'类型名称'声明中的两个或多个数据类型
* error'expected'>'before';'令牌
*错误:预计在''之前的非限定ID';'令牌

+0

也许你会得到使用了编译器提供更好的错误消息。 *错误:连续的右括号之间需要空格(使用'>'')*我也假设你知道这个,但是*错误:没有名为'vector'的模板;你的意思是'std :: vector'?* – chris

+1

你可能想在'vector'前面添加'std ::'。 – theV0ID

+1

如果你将它编译为C++ 11,你应该可以使用>>没有空格。 – PSkocik

回答

1

代码为:

#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 : '> >' 
{}; 
+0

在C++ 11中删除了对空间的需求 - 考虑使用更新的编译器 –