![]() |
|
|
![]()
|
|
| zaytsewa |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Всем привет!
Вчера заметила следующее: есть QVector<GLTriangle> triangles; изначально конструктора по умолчанию у GLTriangle не было, но тогда компилятор ругался что не может поместить объекты типа GLTriangle в QVector после этого я добавила пустой конструктор и метод setCoords(MnGis::GeoVector& v) с параметром, который должен быть в конструкторе [
далее я инициализирую данные в объекте класса GLTriangle
а тут я хотела получить объекты с заполненными данными, не тут-то было! Все объекты оказались без инициализированных данных....
использую по-старинке и всё работает
кто-нибудь объясните мне, почему так? Это сообщение отредактировал(а) zaytsewa - 24.3.2011, 16:03 |
||||||||
|
|||||||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Qt-шный foreach работает с копией объекта (или константной ссылкой). изменять объекты при помощи Qt-шного foreach нельзя. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Странный код:
Это сообщение отредактировал(а) bsa - 24.3.2011, 16:16 |
||||
|
|||||
| zaytsewa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
там дважды задаётся параметр, тк я сначала грешила на конструктор
у меня так не получилось, типа тут должен вызываться конструктор без параметра Это сообщение отредактировал(а) zaytsewa - 24.3.2011, 16:39 |
|||
|
||||
| _GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
"Qt automatically takes a copy of the container when it enters a foreach loop. If you modify the container as you are iterating, that won't affect the loop. (If you do not modify the container, the copy still takes place, but thanks to implicit sharing copying a container is very fast.)
Since foreach creates a copy of the container, using a non-const reference for the variable does not allow you to modify the original container. It only affects the copy, which is probably not what you want." Т.е. в foreach - проход осуществляется по копии контейнера, и внутри foreach нельзя изменить содержимое оригинального контейнера!!! При необходимости менять содержимое контейнера лучше использовать итераторы - это и работает быстрее =) -------------------- Дорогу осилит идущий |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
||||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |