| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > вернуть ссылку на объект |
| Автор: 4epT 16.11.2009, 20:08 | ||
| Добрый вечер! имеется класс (className) в нем поля с обычными типами (int, wstring). И имеется класс в котором есть вектор (vector<className>). Нужно из метода вернуть отдельный объект, и что изменения сделанные в main отразились в самом векторе. есть такое метод
такой код не работает, как мне объяснили вот тут "this->lst[index];" вызывает конструктор копирования по умолчанию, и уже возвращается компия объекта. Как изменить метод ? Конструктор копирования я не переопределял. |
| Автор: zim22 16.11.2009, 20:21 | ||
всё работает
|
| Автор: 4epT 16.11.2009, 20:28 |
| то есть что бы заработало нужно просто перегрузить оператор равно ? |
| Автор: SenkraD 16.11.2009, 20:29 |
| если ты не определял конструктор копирования, то его создаст компилер. Два, не вызывается там конструктор копирования, если только переменная lst не кустомный класс с кривым оператором [] |
| Автор: 4epT 16.11.2009, 20:42 |
| спасибо! Буду искать где ошибся |
| Автор: SenkraD 16.11.2009, 20:43 |
| 4epT, выложи минимальный приммер воспроизводящий ошибку - поможем |
| Автор: 4epT 16.11.2009, 21:01 | ||||||
| Хорошо. Вот h файл класса.
а вот cpp файл.
это именно тот метод вот файл main:
должно поменять имя и в векторе lst (класса FootballerTeamDB) и в переменной ft. а не меняет ( |
| Автор: zim22 16.11.2009, 21:44 |
нельзя возвращать ссылку на локальный объект. который скорей всего и возвращается. |
| Автор: 4epT 16.11.2009, 22:38 |
| Ну насчет локального объекта понял, только возвращается не он ... а именно тот объект что нужен. и каким способом можно в С++ вернуть "ничего" ? |
| Автор: zim22 16.11.2009, 22:51 | ||
*** интересно, кто это минусует мои сообщения... |
| Автор: 4epT 16.11.2009, 22:55 | ||
| нет, я имею ввиду когда нужно вернуть объект ... и такого объекта нет в векторе. что бы не писать
|
| Автор: mes 16.11.2009, 23:02 | ||
по ссылке вернуть "ничего" нельзя, поэтому обязательно надо использовать только валидный диапазон или можно возвращать по указателю. |
| Автор: 4epT 16.11.2009, 23:07 |
| оки ... и я так и не понял, почему у меня не работает мой код ? |
| Автор: zim22 17.11.2009, 10:21 |
я так понял, что здесь изменяется значение объекта. код функции в студию. |
| Автор: 4epT 17.11.2009, 10:30 | ||||||
h файл класса FootballerTeam (объекты этого класса содержаться в векторе ...)
|
| Автор: zim22 17.11.2009, 10:38 | ||
проверь дебаггером. неужели title не присваивается новое значение? и каким образом изменение этого title должно привести к изменению в lst? |
| Автор: 4epT 17.11.2009, 10:45 |
| При запуске программы я заполняю статический вектор класса FootballerTeamDB, в промежуточную переменную возвращаю объект (из вектора), причем возвращается ссылка. на сколько я понимаю любые изменения в промежуточном объекте приведут к изменению в объекте вектора. Но не приводят (( Зачем смотреть дебагером? если видно что у переменной ft значение title поменялось. Я ведь делаю принт в main файле ... Добавлено через 2 минуты и 7 секунд При запуске программы я заполняю статический вектор класса FootballerTeamDB, в промежуточную переменную возвращаю объект (из вектора), причем возвращается ссылка. на сколько я понимаю любые изменения в промежуточном объекте приведут к изменению в объекте вектора. Но не приводят (( Зачем смотреть дебагером? если видно что у переменной ft значение title поменялось. Я ведь делаю принт в main файле ... |
| Автор: zim22 17.11.2009, 10:52 | ||
и не должны. все изменения сделанные в промежуточной переменной отражаются только на промежуточную переменную. |
| Автор: 4epT 17.11.2009, 11:10 |
| Почему ? Я ведь вернул ссылку! И теперь в промежуточная переменная ссылается на переменную из вектора ... |
| Автор: zim22 17.11.2009, 11:12 | ||
нужно указать, что это ссылка была возвращена
|
| Автор: xvr 17.11.2009, 14:59 | ||||
Ошибка в main, в строке 24:
|
| Автор: 4epT 17.11.2009, 22:33 |
| Спасибо вам =)) получилось!! |