Russian Qt Forum
Сентябрь 22, 2024, 11:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Указатели в qt 4.5  (Прочитано 12528 раз)
yesrus
Гость
« : Июнь 27, 2009, 17:51 »

Вообщем проблема в следующем-как передать в функцию указатель?

Есть некая QString  с данными, и есть функция в которую указатель на эту кустринг надо передать.

пример:

QString test="privet";

func1(&test);
......................
.....::func1(QString *test)
{
QString test2=test;
}


Но вылазит ошибка - error: invalid conversion from `QString*' to `char'
В какую сторону копать...в чем причина ошибки ?
« Последнее редактирование: Июнь 28, 2009, 00:40 от yesrus » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Июнь 27, 2009, 17:59 »

QString test2=test;
Ты уверен в правильности вот этой строки?
QString *test
QString test2
test2=*test
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
f-r-o-s-t
Гость
« Ответ #2 : Июнь 27, 2009, 18:30 »

А где ссылки? тут же указатели =)
я думаю надо так :
Код:
QString test="privet";
func1(test);
......................
.....::func1(QString &test)
{
QString test2=test;
}

проще будет.
« Последнее редактирование: Июнь 27, 2009, 18:57 от f-r-o-s-t » Записан
denka
Гость
« Ответ #3 : Июнь 27, 2009, 18:46 »

Вообщем проблема в следующем-как передать в функцию ссылку ?

Есть некая QString  с данными, и есть функция в которую ссылку на эту кустринг надо передать.

пример:

QString test="privet";

func1(&test);
......................
.....::func1(QString *test)
{
QString test2=test;
}


Но вылазит ошибка - error: invalid conversion from `QString*' to `char'
В какую сторону копать...в чем причина ошибки ?

А причем тут Qt Непонимающий  Тему надо было озвучить ссылки и указатели в С++.
Записан
ритт
Гость
« Ответ #4 : Июнь 27, 2009, 18:48 »

yesrus, стыдно такое спрашивать! тебе компилятор уже всё сказал - если не понимаешь его речей, го в книжный за "с/с++ для чайников"
Записан
yesrus
Гость
« Ответ #5 : Июнь 27, 2009, 22:29 »

А где ссылки? тут же указатели =)
я думаю надо так :
Код:
QString test="privet";
func1(test);
......................
.....::func1(QString &test)
{
QString test2=test;
}

проще будет.
Сейчас сделано нечто подобное...но на самом деле вызывается не функция...а данные в виджет передаются..и создаются 30-100 дочерних виджетов..и в каждом копия данных, поэтому решил оптимизировать...
По поводу указателей я понимаю, что напрямую он указывает на первый символ строки..но у меня была надежда, что все-же как то можно сделать описанное в первом посте )))
Записан
denka
Гость
« Ответ #6 : Июнь 27, 2009, 22:40 »

о_О Парень ты меня вобще удивляешь/*нервно курит в сторонке и чешет затылок*/  Я вот пытаюсь провести какие-то взаимосвязи между тем что сказано в первом посте и последнем и знаешь че-то эти линии аж никак не пересекаються. Как то все началось с сылок на QString оказавшимся указтелем, а закончилось как я понял указателями на С-строки Улыбающийся
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Июнь 27, 2009, 22:59 »

>>что напрямую он указывает на первый символ строки
Не путай пользовательский тип (класс) со свстроенным в язык типом
Записан

Юра.
denka
Гость
« Ответ #8 : Июнь 27, 2009, 23:04 »

>>что напрямую он указывает на первый символ строки
Не путай пользовательский тип (класс) со свстроенным в язык типом
О каком встроенном в язык типе идет речь? Улыбающийся
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #9 : Июнь 27, 2009, 23:19 »

например, масив char'ов, где указатель на масив действительно указывает на первый элемент масива.
Записан

Юра.
denka
Гость
« Ответ #10 : Июнь 27, 2009, 23:33 »

И что будет являться массивом символов но не как не встроенным типом Улыбающийся
И С-строка так же не является встроенным типом.
Записан
yesrus
Гость
« Ответ #11 : Июнь 28, 2009, 00:40 »

Начался флуд...подскажите просто как сделать правильно(кроме глобальных переменных), не создавая 100 копий данных. Насчет того, что я ламер в qt\c++ - и так понятно, поэтому и прошу совета на этом форуме.  Плачущий
« Последнее редактирование: Июнь 28, 2009, 00:42 от yesrus » Записан
f-r-o-s-t
Гость
« Ответ #12 : Июнь 28, 2009, 00:46 »

А ты более подробно можешь объяснить что у тебя происходит, а то из фразы
Сейчас сделано нечто подобное...но на самом деле вызывается не функция...а данные в виджет передаются..и создаются 30-100 дочерних виджетов..и в каждом копия данных, поэтому решил оптимизировать...
По поводу указателей я понимаю, что напрямую он указывает на первый символ строки..но у меня была надежда, что все-же как то можно сделать описанное в первом посте )))

Мало понятно где что создается и куда передается.
Записан
ритт
Гость
« Ответ #13 : Июнь 28, 2009, 01:32 »

QString является шаренным классом, поэтому
Код:
QString f(const QString& s)
{
    QString ret = s;
    return ret;
}
не создаст копию данных, а лишь увеличит значения счётчика.

Код:
QString f(QString* s)
{
    QString ret = *s;
    return ret;
}
также рабочий вариант. по сути мало чем отличается от первого.

для шаренных классов удобнее пользоваться первым вариантом, пока не потребуется что-то вроде:
Код:
bool f(int i, QString* s = 0)
{
    if(i != 2)
    {
        if(s)
            *s = QString("error: i != 2");
        return false;
    }
    return true;
}
Записан
f-r-o-s-t
Гость
« Ответ #14 : Июнь 28, 2009, 01:54 »

2 Константин у человека как оказалось уже другая проблема, его уже не QString интересует а то как вообще оптимизировать и не передовать копии виджетов, только он еще не описал это более подробно.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.