2009-02-27 104 views
-2

重複。見thisGCC模板功能

有人能告訴我爲什麼這不能在GCC下編譯? MSVC6和VS2008都會編譯它,甚至沒有警告。

代碼...

#include <iostream> 
#include <vector> 
#include <ctime> 
#include <cstdlib> 
using namespace std; 
template <typename T> 
T range(vector<T> &v) 
{ 
    vector<T>::iterator i = v.begin(); 

拋出最後一行的錯誤,預期;於我之前。

我需要typedef嗎?

我所做的大部分編譯工作都是用MSVC6或VS2008編譯的。我對GCC沒有太多的瞭解,所以我有點在黑暗中。

+1

我真的不想這個問題關閉。是的,發佈了重複的問題和答案,但我的身體中引用了gcc,而其他問題沒有。這是一個重要的因素,直到SO可以鏈接重複問題。 – LarryF 2009-02-28 01:22:47

回答

3

編譯器不知道足以在此處解析vector :: iterator作爲類型。使用typename關鍵字給它一個提示:

typename vector<T>::iterator i = v.begin();