tags:

views:

501

answers:

3

Hi,

i have the following template method,

template <class T>
void Class::setData( vector<T> data )
{    
    vector<T>::iterator it;
}

and i'm getting the following compilation error ( XCode/gcc )

error: expected `;' before 'it'

i found someone else with a similar problem here (read down to see it's the same even though it starts out with a different issue) but they seem to have resolved by updating Visual Studio. This makes me guess that it is a compiler issue and that it should compile, is that correct? Iteration via indexing from 0 to size works, however it is not the way i would prefer to implement this function. Is there another way around this? Thanks

A: 

Try:

template <class T>
void Class::setData( std::vector<T> data )
{    
    std::vector<T>::iterator it;
}

Just is case it's a missing using statement?

Douglas Leeder
If he had missed the using statement he would also get an error on the function signature.
Paolo Tedesco
no, my namespaces and includes are in a pre-compiled header
DavidG
+8  A: 

Classic case of when to use the typename keyword. Hoping that you have #include-ed vector and iterator and have a using namespace std; somewhere in scope. Use:

typename vector<T>::iterator it;

Look up dependent names. Start here.

dirkgently
wow thanks, awesome link.
DavidG
+1  A: 

I think you are missing a typename:

#include <vector>
using namespace std;

class Class{
public:
    template <class T>
    void setData( vector<T> data ) {
        typename vector<T>::iterator it;
    }
};
Paolo Tedesco