Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QMap<QString, T>::const_iterаtor как параметр функ, QMap<QString, T>::const_iterаtor is not  
:(
    Опции темы
Vasya
Дата 5.4.2014, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 5.7.2003

Репутация: нет
Всего: нет



Привет!

Пытаюсь написать следущее:

Код

template <class T>
bool atEnd(QMap<QString, T> container, QMap<QString, T>::const_iterator it) {
  return it == container.end();
}


Получаю ругательства в в виде:
QMap<QString, T>::const_iterator is not a type. 

Ничего против не имею, но что же делать? Спасибо!
PM MAIL   Вверх
Vasya
Дата 5.4.2014, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 5.7.2003

Репутация: нет
Всего: нет



Загуглив, нашел и исправил объявление функции на

Код

bool atEnd(QMap<QString, T> container, class QMap<QString, T>::const_iterator it)


Необходимо использовать ключевые слова class или typename перед QMap<QString, T>::const_iterator. Осталось понять, в какой книге написано про это, чтоб восполнить пробел в знаниях.
PM MAIL   Вверх
vinter
Дата 5.4.2014, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



тут например, должно быть у Страуструпа тоже


--------------------
Мой блог
PM MAIL WWW   Вверх
Lukkoye
Дата 5.4.2014, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 23.3.2013

Репутация: 1
Всего: 1



Цитата(Vasya @  5.4.2014,  10:10 Найти цитируемый пост)
Ничего против не имею, но что же делать? Спасибо! 


template <class T>
bool atEnd(const QMap<QString, T>& container, typename const QMap<QString, T>::const_iterator& it) {
  return it == container.end();
}


1. 
В выражении в аргументе шаблоне QMap<QString, T>::const_iterator
типом является const_iterator

Однако, компилятор до инстанцирования шаблона не может знать что это такое, поскольку до инстанцирования шаблона, он ничего не знает о T, и теоретически развернуться оно может во что угодно.

Ключевое слово typename перед выражением сообщает компилятору: что бы там ни было, но оно является типом.

Теперь компилятор может корректно определить правильность синтаксиса.


2. Судя по туловищу функции: return it == container.end();
Нет ни одной причины зазря делать копию контейнера передавая его по значению.

Используйте константные ссылки.


Это сообщение отредактировал(а) Lukkoye - 5.4.2014, 12:08
PM MAIL   Вверх
Vasya
Дата 5.4.2014, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 5.7.2003

Репутация: нет
Всего: нет



Цитата(Lukkoye @  5.4.2014,  12:07 Найти цитируемый пост)
2. Судя по туловищу функции: return it == container.end();
Нет ни одной причины зазря делать копию контейнера передавая его по значению.

Используйте константные ссылки.


 smile Во время выполнения получил интересный результат, потом заметил, что передаю не по ссылке!
PM MAIL   Вверх
borisbn
Дата 7.4.2014, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



А почему бы так не сделать
Код
template < class С >
bool atEnd( const С & container, const typename С::const_iterator & it) {
  return it == container.end();
}

?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
kamre
Дата 23.4.2014, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 24.3.2006

Репутация: 1
Всего: 13



Цитата(Vasya @  5.4.2014,  10:10 Найти цитируемый пост)
но что же делать?

Вот, даже IDE подсказывает что делать:
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1135 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.