Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

g++ не понимает что такое итератор у шаблонного класса?

7.7K
29 июля 2009 года
Elder386
38 / / 06.04.2005
Доброго времени суток, у меня возник недавно следующий вопрос: как заставить компилится с помощью 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> обернуть)
7.7K
29 июля 2009 года
Elder386
38 / / 06.04.2005
ответ найден, оказывается тут надо писать вот так:

for (typename T::iterator it=v.begin(); it!=v.end(); it++) cout<<*it<<endl;


интересно, не приходилось раньше встречаться с typename вне параметров шаблона.
3
29 июля 2009 года
Green
4.8K / / 20.01.2000
Цитата: Elder386
ответ найден, оказывается тут надо писать вот так:

for (typename T::iterator it=v.begin(); it!=v.end(); it++) cout<<*it<<endl;


интересно, не приходилось раньше встречаться с typename вне параметров шаблона.


Ну вообще-то так и надо писать всегда. Ибо как узнать, что есть T::iterator? Тип, метод, поле?

9
29 июля 2009 года
Lerkin
3.0K / / 25.03.2003
[quote=Elder386]
g++ не понимает что такое итератор у шаблонного класса?
[/quote]
Важно, чтобы вы понимали...
87
29 июля 2009 года
Kogrom
2.7K / / 02.02.2008
скажу не совсем по делу, но последние версии компилятора можно настороить, чтобы они переваривали код типа:

for (auto it = v.begin(); it!=v.end(); it++) cout<< *it <<endl;

-std=c++0x, возможно, немного правок в исходниках :)

Но это все хакерство пока что, конечно.
7.7K
29 июля 2009 года
Elder386
38 / / 06.04.2005
просто на других компиляторах работает в первом виде, в этом и вопрос был.
T::iterator it - прокатывает на том же вижуале
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог