1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||||||||||
1 | |||||||||||
Метод класса возвращающий итератор02.10.2011, 16:41. Показов 4179. Ответов 32
Метки нет Все метки)
(
Не могу заставить метод класса возвращать итератор, помогите понять почему компилятор не разрешает это сделать:
Класс (методы возвращающие итераторы в самом низу)
0
|
|
02.10.2011, 16:41 | |
Ответы с готовыми решениями:
32
Шаблон класса двусвязного списка, метод, возвращающий указатель Итератор класса vector Итератор для класса |
Заблокирован
|
|
02.10.2011, 16:49 | 2 |
StudentsIterator begin(){ return Head; }
то что у тебя указатель на итератор возвращается я так понимаю ошибка
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
02.10.2011, 16:53 | 3 |
вы возвращает ListItem* (Head), хотя объявляете будто это StudentsIterator, что предлагаете компилятору делать?
второй вариант работает, так как NULL можно приводить к указателям любого типа
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||||||||||
02.10.2011, 17:01 [ТС] | 4 | ||||||||||
LosAngeles, угу, а я какраз хочу чтобы функции класса begin() и end() возвращала итератор - это будет удобно для сортировки, печати и т.д. Я конечно могу сделать чтобы эта функция возвращала не итератор:
Добавлено через 1 минуту Воспользоваться конструктором копирования класса StudentsIterator перегруженого для получения ListItem* и вернуть мне этот итератор. Но это хочу я, как тогда по другому это сделать если компилятор так делать не хочет?
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||||||
02.10.2011, 17:08 | 5 | |||||
1
|
Заблокирован
|
||||||
02.10.2011, 17:13 | 6 | |||||
1
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
02.10.2011, 17:18 | 7 |
В варианте LosAngeles просто неявно вызовется конструктор StudentsIterator(Students::ListItem* right)
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||
02.10.2011, 17:21 [ТС] | 8 | |||||
alex_x_x, не:
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
02.10.2011, 17:23 | 9 |
0
|
Заблокирован
|
|
02.10.2011, 17:23 | 10 |
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||||||||||
02.10.2011, 17:37 [ТС] | 11 | ||||||||||
Хотя нет, это я же написал что возвращаю указатель, а нужно просто возвращать StudentsIterator по версии alex_x_x, вот только вернуть получается просто StudentsIterator только если код class StudentsIterator находится внутри класса Students, иначе ругается, а код то у меня на самом деле большой ... как же его тогда подключить. Если перекидываю код класса-итератора в cpp файл, который компилирую совместно то компилятор ругается что не знает что такое ListItem , как сделать предварительное объявление тогда этой структуре ? (структура ListItem находится в классе Students).
LosAngeles, вообще чисто Ваш вариант тоже не работает (неявно не вызывается, опять же таки ругается почему-то, хотя должен и неявно вызываться как я изначально и планировал), но я не могу запихнуть код класса-итератора внутрь так как он большой, я ведь сюда запостил только то что касается проблемы чтобы не отпугивать и не запутывать Вас. Добавлено через 8 минут В общем у меня замкнутый круг: чтобы определить класс-итератор нужно чтобы был объявлен класс Студентов, а чтобы объявить методы begin/end класса Студенты нужно чтобы уже был объявлен итератор, как апофеоз всего этого: сделав объявление в классе:
Код
obj\Debug\main.o(.text+0x100)||In function `ZN8Students5beginEv':| C:\c++\Projects\StudentsProject\Students.h|161|multiple definition of `Students::begin()'| obj\Debug\students.o(.text+0x100):C:\c++\Projects\StudentsProject\Students.h|161|first defined here| obj\Debug\main.o(.text+0x120)||In function `ZN8Students3endEv':| C:\c++\Projects\StudentsProject\Students.h|162|multiple definition of `Students::end()'| obj\Debug\students.o(.text+0x120):C:\c++\Projects\StudentsProject\Students.h|162|first defined here| ||=== Build finished: 4 errors, 0 warnings ===|
0
|
Заблокирован
|
|
02.10.2011, 17:40 | 12 |
ctrl+copy - ctrl+paste и всё работает. И проблема циклических ссылок разрешена, а "большой код" как бы не является ни для кого проблемой
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
02.10.2011, 17:43 | 13 |
у вас ошибка в повторном определении функции begin()
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||||||||||
02.10.2011, 17:50 [ТС] | 14 | ||||||||||
При попытках компилировать в VS я так понял из ошибок что строки в классе
Добавлено через 3 минуты Является, мой преподаватель любит "класивый код", для него это, как он выразился, "даставляет истинное наслаждение". Где?
0
|
Заблокирован
|
|
02.10.2011, 17:59 | 15 |
где тут большой код то? глиста на две страницы это препод называет большим кодом? значит он некомпетентен, можно не обращать на него внимание
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
02.10.2011, 18:03 | 16 |
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
02.10.2011, 18:06 [ТС] | 18 |
LosAngeles, ну я же писал уже что здесь я привёл совсем маленький кусоче кода, все функции и методы не писал чтобы не запутывать, то что преподаватель с приколом это не поспоришь, и всё же то что я не знаю как сделать предварительное объявление для структуры ListItem из класса Students это моя вина, а не его, подскажите как это сделать. Я из-за этого если переношу свой код итератора в отдельный файл StudentsIterator.h не могу объяснить компилятору что же за структура такая ListItem и как с ней обращаться. Ну или же объясните мне пожалуйста где у меня два объявления функции begin() что тоже решит проблему.
Вообще я могу, если хотите, выложить код полностью в виде прикреплённого файла, если кому интересно и Вы хотите сами увидеть как ругается компилятор.
0
|
02.10.2011, 18:09 | 19 | |||||
1
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
02.10.2011, 18:11 [ТС] | 20 |
ага, а vs 6.0 вообще пишет что begin объявлена 5(sic!) раз. Вот сами посмотрите прикреп. файл, если интересно.
У меня есть ещё хитрый план по переносу класса StudentsIterator в файл StudentsIterator.h, но ничего не получается: не могу уйнять компилятор насчёт того что такое ListItem.
0
|
02.10.2011, 18:11 | |
Помогаю со студенческими работами здесь
20
Метод, возвращающий данные по имеющемуся ключу массива MAP
Итератор для класса с массивом Итератор для класса-группы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |