Название: Указатели в qt 4.5 Отправлено: yesrus от Июнь 27, 2009, 17:51 Вообщем проблема в следующем-как передать в функцию указатель?
Есть некая QString с данными, и есть функция в которую указатель на эту кустринг надо передать. пример: QString test="privet"; func1(&test); ...................... .....::func1(QString *test) { QString test2=test; } Но вылазит ошибка - error: invalid conversion from `QString*' to `char' В какую сторону копать...в чем причина ошибки ? Название: Re: Ссылки в qt 4.5 Отправлено: Пантер от Июнь 27, 2009, 17:59 QString test2=test;
Ты уверен в правильности вот этой строки? QString *test QString test2 test2=*test Название: Re: Ссылки в qt 4.5 Отправлено: f-r-o-s-t от Июнь 27, 2009, 18:30 А где ссылки? тут же указатели =)
я думаю надо так : Код: QString test="privet"; проще будет. Название: Re: Ссылки в qt 4.5 Отправлено: denka от Июнь 27, 2009, 18:46 Вообщем проблема в следующем-как передать в функцию ссылку ? Есть некая QString с данными, и есть функция в которую ссылку на эту кустринг надо передать. пример: QString test="privet"; func1(&test); ...................... .....::func1(QString *test) { QString test2=test; } Но вылазит ошибка - error: invalid conversion from `QString*' to `char' В какую сторону копать...в чем причина ошибки ? А причем тут Qt ??? Тему надо было озвучить ссылки и указатели в С++. Название: Re: Ссылки в qt 4.5 Отправлено: ритт от Июнь 27, 2009, 18:48 yesrus, стыдно такое спрашивать! тебе компилятор уже всё сказал - если не понимаешь его речей, го в книжный за "с/с++ для чайников"
Название: Re: Ссылки в qt 4.5 Отправлено: yesrus от Июнь 27, 2009, 22:29 А где ссылки? тут же указатели =) Сейчас сделано нечто подобное...но на самом деле вызывается не функция...а данные в виджет передаются..и создаются 30-100 дочерних виджетов..и в каждом копия данных, поэтому решил оптимизировать...я думаю надо так : Код: QString test="privet"; проще будет. По поводу указателей я понимаю, что напрямую он указывает на первый символ строки..но у меня была надежда, что все-же как то можно сделать описанное в первом посте ))) Название: Re: Указатели в qt 4.5 Отправлено: denka от Июнь 27, 2009, 22:40 о_О Парень ты меня вобще удивляешь/*нервно курит в сторонке и чешет затылок*/ Я вот пытаюсь провести какие-то взаимосвязи между тем что сказано в первом посте и последнем и знаешь че-то эти линии аж никак не пересекаються. Как то все началось с сылок на QString оказавшимся указтелем, а закончилось как я понял указателями на С-строки :)
Название: Re: Указатели в qt 4.5 Отправлено: lit-uriy от Июнь 27, 2009, 22:59 >>что напрямую он указывает на первый символ строки
Не путай пользовательский тип (класс) со свстроенным в язык типом Название: Re: Указатели в qt 4.5 Отправлено: denka от Июнь 27, 2009, 23:04 >>что напрямую он указывает на первый символ строки О каком встроенном в язык типе идет речь? :)Не путай пользовательский тип (класс) со свстроенным в язык типом Название: Re: Указатели в qt 4.5 Отправлено: lit-uriy от Июнь 27, 2009, 23:19 например, масив char'ов, где указатель на масив действительно указывает на первый элемент масива.
Название: Re: Указатели в qt 4.5 Отправлено: denka от Июнь 27, 2009, 23:33 И что будет являться массивом символов но не как не встроенным типом :)
И С-строка так же не является встроенным типом. Название: Re: Указатели в qt 4.5 Отправлено: yesrus от Июнь 28, 2009, 00:40 Начался флуд...подскажите просто как сделать правильно(кроме глобальных переменных), не создавая 100 копий данных. Насчет того, что я ламер в qt\c++ - и так понятно, поэтому и прошу совета на этом форуме. :'(
Название: Re: Указатели в qt 4.5 Отправлено: f-r-o-s-t от Июнь 28, 2009, 00:46 А ты более подробно можешь объяснить что у тебя происходит, а то из фразы
Сейчас сделано нечто подобное...но на самом деле вызывается не функция...а данные в виджет передаются..и создаются 30-100 дочерних виджетов..и в каждом копия данных, поэтому решил оптимизировать... По поводу указателей я понимаю, что напрямую он указывает на первый символ строки..но у меня была надежда, что все-же как то можно сделать описанное в первом посте ))) Мало понятно где что создается и куда передается. Название: Re: Указатели в qt 4.5 Отправлено: ритт от Июнь 28, 2009, 01:32 QString является шаренным классом, поэтому
Код: QString f(const QString& s) Код: QString f(QString* s) для шаренных классов удобнее пользоваться первым вариантом, пока не потребуется что-то вроде: Код: bool f(int i, QString* s = 0) Название: Re: Указатели в qt 4.5 Отправлено: f-r-o-s-t от Июнь 28, 2009, 01:54 2 Константин у человека как оказалось уже другая проблема, его уже не QString интересует а то как вообще оптимизировать и не передовать копии виджетов, только он еще не описал это более подробно.
Название: Re: Указатели в qt 4.5 Отправлено: ритт от Июнь 28, 2009, 04:41 2 Константин у человека как оказалось уже другая проблема, его уже не QString интересует а то как вообще оптимизировать и не передовать копии виджетов, только он еще не описал это более подробно. f-r-o-s-t, у тебя та же проблема, что и у автора? ))Название: Re: Указатели в qt 4.5 Отправлено: f-r-o-s-t от Июнь 28, 2009, 10:14 У меня нет, хотел помочь ему =)
Название: Re: Указатели в qt 4.5 Отправлено: SABROG от Июнь 28, 2009, 11:06 не создавая 100 копий данных. Насчет того, что я ламер в qt\c++ - и так понятно, поэтому и прошу совета на этом форуме. :'( Копию данных на любые классы на базе QObject создать не получится в любом случае, там конструктор копирования вынесен в protected секцию.У некоторых классов Qt реализована технология совместного владения данными (Implicit Sharing), там хоть 1000 раз скопируй на все 1000 экземпляров будет один и тот же указатель, до тех пор, пока у одного такого экземпляра не возникнет необходимость изменить содержимое, тогда сделается копия. Вот список таких классов: QBitArray, QBitmap, QBrush, QByteArray, QCache, QCursor, QDir, QFileInfo, QFont, QFontInfo, QFontMetrics, QFontMetricsF, QGLColormap, QGradient, QHash, QIcon, QImage, QKeySequence, QLinkedList, QList, QLocale, QMap, QMultiHash, QMultiMap, QPainterPath, QPalette, QPen, QPicture, QPixmap, QPolygon, QPolygonF, QQueue, QRegExp, QRegion, QSet, QSqlField, QSqlQuery, QSqlRecord, QStack, QString, QStringList, QTextBoundaryFinder, QTextCursor, QTextDocumentFragment, QTextFormat, QUrl, QVariant, QVector Насчет ссылок и указателей тебе уже сказали. Название: Re: Указатели в qt 4.5 Отправлено: spectre71 от Июнь 28, 2009, 11:53 У некоторых классов Qt реализована технология совместного владения данными (Implicit Sharing), там хоть 1000 раз скопируй на все 1000 экземпляров будет один и тот же указатель, до тех пор, пока у одного такого экземпляра не возникнет необходимость изменить содержимое, тогда сделается копия. Не может такого быть!QString* aaa = new QString("test"); QString* bbb = new QString("test"); У казатели aaa и bbb не будут одинаковы, объекты будут разные!!! А вот некоторые данные внутри вполне могут ссылаться на один и тот же объект. Хотя у меня даже это не прокатило - см. картинку. Название: Re: Указатели в qt 4.5 Отправлено: SABROG от Июнь 28, 2009, 12:07 Не может такого быть! QString* aaa = new QString("test"); QString* bbb = new QString("test"); Ты не правильно используешь этот класс, надо так: Код: QString* aaa = new QString("test"); Ну или так: Код: QString aaa("test"); Говоря об указателе я имею ввиду некую переменную внутри класса, которая будет ссылаться на одни и те же данные. Название: Re: Указатели в qt 4.5 Отправлено: yesrus от Июнь 28, 2009, 14:25 2SABROG Спасибо! Самый полезный пост в теме!
2Константин Так же спасибо! Ваш пример показал где ошибка, а именно: Код а нужно было QString test2=*test Все заработало. п.с. 2f-r-o-s-t - не копию виджета, а копию данных передаваемых в виджет. Извиняюсь, если начальное описание проблемы было несколько сумбурным =) |