2009-02-27 6 views
-2

Duplizieren. Siehe this.Template-Funktion unter GCC

Kann mir jemand sagen, warum dies nicht unter GCC kompiliert? Sowohl MSVC6 als auch VS2008 kompilieren es ohne Warnungen sogar.

Der Code ...

#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(); 

Wirft einen Fehler in der letzten Zeile, erwartet; bevor ich.

Muss ich typedef eingeben?

Der größte Teil der Kompilierung, die ich mache, ist mit MSVC6 oder VS2008. Ich mache nicht viel mit GCC, also bin ich ein wenig im Dunkeln.

+1

Ich möchte wirklich nicht diese Frage geschlossen. Ja, es gibt eine doppelte Frage und Antwort, aber meine hat Referenzen auf gcc im Körper, wo die andere Frage nicht ist. Dies ist ein wichtiger Faktor, bis SO duplex Fragen verknüpfen kann. – LarryF

Antwort

3

Der Compiler weiß nicht genug, um den Vektor :: Iterator als einen Typ an diesem Punkt zu analysieren. Verwenden Sie das Schlüsselwort typename, um einen Hinweis zu geben:

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