g++ не понимает что такое итератор у шаблонного класса?
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
void print(T v)
{
for (T::iterator it=v.begin(); it!=v.end(); it++) cout<<*it<<endl;
}
int main()
{
vector<int> m;
m.push_back(10);
m.push_back(20);
print(m);
return 0;
}
даже c++ builder с этим справляется вроде. (черт, как же тут его тегами вроде <code></code> обернуть)
for (typename T::iterator it=v.begin(); it!=v.end(); it++) cout<<*it<<endl;
интересно, не приходилось раньше встречаться с typename вне параметров шаблона.
Цитата: Elder386
ответ найден, оказывается тут надо писать вот так:
for (typename T::iterator it=v.begin(); it!=v.end(); it++) cout<<*it<<endl;
интересно, не приходилось раньше встречаться с typename вне параметров шаблона.
for (typename T::iterator it=v.begin(); it!=v.end(); it++) cout<<*it<<endl;
интересно, не приходилось раньше встречаться с typename вне параметров шаблона.
Ну вообще-то так и надо писать всегда. Ибо как узнать, что есть T::iterator? Тип, метод, поле?
g++ не понимает что такое итератор у шаблонного класса?
[/quote]
Важно, чтобы вы понимали...
for (auto it = v.begin(); it!=v.end(); it++) cout<< *it <<endl;
-std=c++0x, возможно, немного правок в исходниках :)
Но это все хакерство пока что, конечно.
T::iterator it - прокатывает на том же вижуале