![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Гость_Игорь_* |
![]()
Сообщение
#1
|
Гости ![]() |
Здравствуйте, программисты!
Вот сложность возникла. Нужно написать прогу кроссплатформенную на Qt, но там не все прокатывает, что прокатывает в обычном С++. Вот код:
В обычном си++ компилит нормально и запускается, а здесь компилятор ругается. Он показывает на последнюю строчку и пишет "cannot convert "QCharRef' to 'char' in assignment". Что делать? |
|
|
Алексей1153 |
![]()
Сообщение
#2
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
...=user.c_str();
только при чём тут QString - непонятно ![]() а ещё, складывается впечатление, что что-то недоговаривается. Какая задача то ? Сообщение отредактировал Алексей1153 - 30.10.2010, 18:11 |
|
|
Гость_Игорь_* |
![]()
Сообщение
#3
|
Гости ![]() |
Да это я продолжаю темы из предыдущего топика, где мне надо было в командную строку передать команды.
Прошу прощения, пример вытащил, не задумываясь о синтаксисе, из обычного с++. Вот как код выглядит у меня в Qt:
Во втором варианте компиль нугается: "'class QString' has no member named 'c_str'" |
|
|
Алексей1153 |
![]()
Сообщение
#4
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
имхо, нужно сделать как в начале, только вот так
const char* user="Строчка"; const char* user="Администратор"; const char* pass="123"; const char* qwe2="net user "; |
|
|
Гость_Игорь_* |
![]()
Сообщение
#5
|
Гости ![]() |
Тут идея вот в чем, переменные user и pass будут передаваться этой программе строкой, поэтому я заморачиваюсь со стрингом
|
|
|
Алексей1153 |
![]()
Сообщение
#6
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
так передавай как const char* да и всё
![]() а вытащить указатель на строку можно так: constData() |
|
|
Гость_Игорь_* |
![]()
Сообщение
#7
|
Гости ![]() |
При отладочной компиляции: Цитата Приложение остановлено, так как оно получило сигнал от операционной системы. Сигнал: SIGSEGV Назначение: Segmentation fault При обычной компиляции: Цитата Запускается С:\Qt\2010.05\qt\Clients-build-desktop\debucj\Clients.exe... C:\Qt\2010.05\qt\C3^ents-huild-desktop\dehutj\Clients.exe завершился с кодон -1073741819 Если убрать комментарии с system(qwe2); то ошибка: "cannot convert 'const char**' to 'const char*' for argument 'Г to 'int system(const char*)'" Убираю со всех переменных слово const, ошибка "cannot convert char** to const char* for argument 1 to int system(const char*)" |
|
|
Гость_Игорь_* |
![]()
Сообщение
#8
|
Гости ![]() |
Сигнал был где первый цикл for(i=0;user[i]!=0;i++)qwe2[9+i]=user[i];
|
|
|
Алексей1153 |
![]()
Сообщение
#9
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Игорь, а я вовсе не так показывал. Откуда у тебя квадратные и фигурные скобки взялись?
Цитата const char* user[]={"Администратор"}; const char* pass[]={"123"}; а тут вообще капец Цитата const char* a[]={" "}; const char* qwe2[]={"net user "}; это должны быть переменные, а не константы. короче:
для чего тебе массив "a" - я не понял И, всё-таки, расскажи про задачу, а то хрень какую-то пишешь... |
|
|
kwisp |
![]()
Сообщение
#10
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Гость_Игорь_
код с циклами непонятен ни капли. зачем так делать ? опиши по-подробнее задачу словами. если ты из сигнала получаешь QString, а функция system принимает const char*, то в классе QString есть специализированные методы для преобразования .toAscii().constData() - вернет const char* |
|
|
Гость_Игорь_* |
![]()
Сообщение
#11
|
Гости ![]() |
Попробую по порядку.
Я пишу клиент, который, в данном коде, принимает имя и пароль. Этот клиент должен назначить под это имя учетной записи пароль, который передал сервер. Ход моей логики: Принимаю строку (пусть даже массив символов) и записываю в переменную Надо составить команду для командной строки, например, в виде: "net user Администратор 123", где "net user " команда, "Администратор" имя пользователя, "123" новый пароль Составленную команду надо передать в командную строку для выполнения. Переменную "а" я ввел только из-за того, что забыл как добавлять пробел Поставил фигурные скобки из-за того, что в начале у меня компилятор ругался, писал что массив надо поместить в фигурные скобки. Когда Вы (Алексей1153) еще раз написали пример, то у меня уже компилятор не ругался. Я даже не понял почему. |
|
|
Алексей1153 |
![]()
Сообщение
#12
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Я даже не понял почему. символы, заключённые в кавычки, являются СТРОКОЙ. Такая строка в общем случае размещается в сегменте данных (его менять нельзя, как раз тот сигнал и вылетел у тебя) и представляет собой массив символов между кавычками + завершающий нулевой символ. Само же выражение строка - это указатель на const char например, const char* p="123";// в памяти строка будет такая: {0x31,0x32,0x33,0} , указатель на символ 0x31 запишется в p |
|
|
Гость_Игорь_* |
![]()
Сообщение
#13
|
Гости ![]() |
Спасибо Вам большое!
Очень познавательно. Есть что новое для себя взять) |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 8.6.2025, 16:00 |