Название: QString value Отправлено: OKTA от Март 28, 2013, 17:46 Товарищи! ПОдскажите, почему при компилировании нет ошибки на строке типа:
Код: QString value = value; Но при этом программа вылетает на этой строке? Название: Re: QString value Отправлено: Bepec от Март 28, 2013, 18:33 На мой взгляд просто - вы вызываете конструктор объекта и передаёте ему ещё не созданный объект.
Т.е. попытка обратиться к членам класса до его создания. Название: Re: QString value Отправлено: Alex Custov от Март 28, 2013, 19:42 Товарищи! ПОдскажите, почему при компилировании нет ошибки на строке типа: Код: QString value = value; Но при этом программа вылетает на этой строке? покажи код целиком, прозреваю shadowing. Название: Re: QString value Отправлено: Bepec от Март 28, 2013, 22:05 Да, всё так как я и сказал )
Точнее - вылетает Qt-шный ассерт о том, что переданный объект в конструкторе не может быть this. Название: Re: QString value Отправлено: Igors от Март 29, 2013, 06:44 покажи код целиком, прозреваю shadowing. Нет, эта конструкция (к сожалению) допустима и в др. компиляторах, хотя порядочные вякают варнингом типа "used before been initialized". Переменная value объявлена - да, ну значит сынтаксыс проходитНазвание: Re: QString value Отправлено: OKTA от Март 29, 2013, 12:49 understood)
Название: Re: QString value Отправлено: sergek от Март 29, 2013, 19:45 На мой взгляд просто - вы вызываете конструктор объекта и передаёте ему ещё не созданный объект. Давайте подумаем. В конструкции Type x=y выполняется копирующая инициализация объекта x значением y. Т.е. сначала создается объект x, а потом ему присваивается значение у. Таким образом, в приведенном примере производится инициализация объекта значением самого объекта. Не наказуемо.Т.е. попытка обратиться к членам класса до его создания. Для выполнения этой операции используется копирующий конструктор, он объявляется как Type(const Type&). В нашем случае, это QString(const QString & other). Может, туда посмотреть? Кстати, C++Builder это делает без ругани. Название: Re: QString value Отправлено: Bepec от Март 29, 2013, 19:51 Код: inline QString::QString(const QString &other) : d(other.d) Название: Re: QString value Отправлено: sergek от Март 29, 2013, 19:58 Код: inline QString::QString(const QString &other) : d(other.d) |