I have a problem about how to use iterator under the template manner.
Here is an example I am trying to do, the problem is that, inside the for loop how can I initial the iterator pp ?
I have read a similar question, but I cannot fully understand that since I am a beginner.
What should the iterator type be in this C++ template?
Can anyone help and also provide some simple explanation?
#include <iostream>
#include <vector>
template <class T>
void my_print(std::vector<T> input){
for(std::vector<T>::iterator pp = input.begin(); pp != input.end(); ++pp)
std::cout << *pp << "\n";
}
int main(int argc,char* argv[]){
std::vector<int> aa(10,9);
my_print(aa);
return 0;
}
error message I got:
'std::vector::iterator' is parsed as a non-type, but instantiation yields a type
Add a typename
before the iterator
#include <iostream>
#include <vector>
template <class T>
void my_print(std::vector<T> input)
{
for (typename std::vector<T>::iterator pp = input.begin(); pp != input.end(); ++pp)
{
std::cout << *pp << "\n";
}
}
int main(int argc, char* argv[])
{
std::vector<int> aa(10, 9);
my_print(aa);
return 0;
}
Like Dieter says, newer versions of gcc will pretty much tell you where typename is needed:
error: need 'typename' before 'std::vector<T>::iterator'
because 'std::vector<T>' is a dependent scope
Simple fix:
for(typename std::vector<T>::iterator pp = input.begin();
pp != input.end(); ++pp)
Here is an explanation Error with T::iterator, where template parameter T might be vector<int> or list<int>
Before a qualified dependent type, you need typename. Without typename, there is a C++ parsing rule that says that qualified dependent names should be parsed as non-types even if it leads to a syntax error.
For a more comprehensive explanation, check out Why is the keyword "typename" needed before qualified dependent names, and not before qualified independent names?
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.