deklarowanie iteratora zestawu C ++ [duplikat]

Możliwy duplikat:
Gdzie i dlaczego muszę umieścić słowa kluczowe „szablon” i „nazwa pliku”?
c ++ iterator nazw szablonów

Poniższy kod nie zostanie skompilowany:

#include <iostream>
#include <set>
using namespace std;

template<class T>
void printSet(set<T> s){
    set<T>::iterator it;
}

int main(int argc, char** argv){
    set<int> s;
    printSet<int>(s);
    return 0;
}

Dostaję błąd mówiący:

set.cpp: In function ‘void printSet(std::set<T, std::less<_Key>, std::allocator<_CharT> >)’:
set.cpp:7: error: expected `;' before ‘it’
set.cpp: In function ‘void printSet(std::set<T, std::less<_Key>, std::allocator<_CharT> >) [with T = int]’:
set.cpp:12:   instantiated from here
set.cpp:7: error: dependent-name ‘std::set<T,std::less<_Key>,std::allocator<_CharT> >::iterator’ is parsed as a non-type, but instantiation yields a type
set.cpp:7: note: say ‘typename std::set<T,std::less<_Key>,std::allocator<_CharT> >::iterator’ if a type is meant

Co zrobiłem źle? Czuję, że prawie nic nie napisałem i już C ++ przekazuje mi tę straszną wiadomość.

Jeśli jest to pomocne, wygląda na to, że jeśli skomentuję linię w iteratorze, nie ma błędów. Jednak wszystkie przykłady, które dotychczas widziałem online, wydają się deklarować iteratory w ten sposób. Myślę.

questionAnswers(1)

yourAnswerToTheQuestion