Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > QMap<QString, T>::const_iterаtor как параметр функ |
Автор: Vasya 5.4.2014, 10:10 | ||
Привет! Пытаюсь написать следущее:
Получаю ругательства в в виде: QMap<QString, T>::const_iterator is not a type. Ничего против не имею, но что же делать? Спасибо! |
Автор: Vasya 5.4.2014, 10:52 | ||
Загуглив, нашел и исправил объявление функции на
Необходимо использовать ключевые слова class или typename перед QMap<QString, T>::const_iterator. Осталось понять, в какой книге написано про это, чтоб восполнить пробел в знаниях. |
Автор: vinter 5.4.2014, 11:09 |
http://www.e-reading.ws/chapter.php/1002058/106/Mayers_-_Effektivnoe_ispolzovanie_CPP.html, должно быть у Страуструпа тоже |
Автор: Lukkoye 5.4.2014, 12:07 |
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(); Нет ни одной причины зазря делать копию контейнера передавая его по значению. Используйте константные ссылки. |
Автор: borisbn 7.4.2014, 09:22 | ||
А почему бы так не сделать
? |
Автор: kamre 23.4.2014, 10:19 |
Вот, даже IDE подсказывает что делать: ![]() |