2015-07-11 238 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中刪除了對空間的需求 - 考慮使用更新的編譯器 –