2...">

Vector <T> :: iterator - invalid?

Possible duplicate:
g ++ "not a type" error

The following does not compile:

1    template<typename T>
2    void foo(std::vector<T>::iterator & i)
3    {  
4    }

In Visual Studio, I get the following errors:

>(2) error C2065: 'i' : undeclared identifier
>(4) warning C4346: 'std::vector<_Tp>::iterator' : dependent name is not a type
     prefix with 'typename' to indicate a type
>(4) error C2182: 'foo' : illegal use of type 'void'
>(4) error C2998: 'int foo' : cannot be a template definition
+3
source share
1 answer

std::vector<T>::iteratoris a type depending on the template parameter, namely T. Therefore you must prefix with it typename:

template<typename T>
void foo(typename std::vector<T>::iterator & i)
{  
}

Here is an explanation.

+13
source

Source: https://habr.com/ru/post/1758803/


All Articles