Название: О чем предупреждает Qt? Отправлено: Alexu007 от Сентябрь 07, 2013, 15:58 При запуске программы выскакивает предупреждение, сама же программа компилируется и работает правильно. На что он ругается?
C:\QtSDK\Alexu007\LongArifm\LA1\widget.cpp:158: предупреждение: suggest parentheses around comparison in operand of '|' ругается на эту строчку в программе, тут цикл выполняется дополнительно ещё раз, если r равно 1: Код
Название: Re: О чем предупреждает Qt? Отправлено: alex312 от Сентябрь 07, 2013, 16:07 1. даже гуглтранслейт нормально переводит сообщение. Компилятор тебе намекает что неплохо бы расставить скобочки вокруг '|' .
2. Ну и вообще условие выхода из цикла какое то странное. Ты вообще можеш сказать нафига оно такое странное и что будет результатом выражения Код :o Название: Re: О чем предупреждает Qt? Отправлено: Alexu007 от Сентябрь 07, 2013, 16:41 В конце цикла если j == b.amount и r = 1 - цикл делает ещё один проход. Одинаково работает:
Код
если r = 0 цикл заканчивается, если 1 - выполняется ещё раз Название: Re: О чем предупреждает Qt? Отправлено: Igors от Сентябрь 07, 2013, 16:50 Приоритет + выше сравнения, так и делайте, а использование битового | здесь мозголомка не вызванная никакой необходимостью
Название: Re: О чем предупреждает Qt? Отправлено: alex312 от Сентябрь 07, 2013, 17:14 В конце цикла если j == b.amount и r = 1 - цикл делает ещё один проход. Это ты написал что ты думаеш что оно так работает.Вопрос: сколько будет циклов если amount == 11 и r == 1, и сколько, если r == 0 ? Название: Re: О чем предупреждает Qt? Отправлено: kambala от Сентябрь 07, 2013, 17:53 Alexu007, кажется ты попутал побитовое и логическое ИЛИ
Название: Re: О чем предупреждает Qt? Отправлено: Alexu007 от Сентябрь 07, 2013, 18:09 Это вот отсюда взято: http://cppalgo.blogspot.ru/2010/05/blog-post.html
| || и + работают одинаково, я проверял. Автор почему-то выбрал именно |. Название: Re: О чем предупреждает Qt? Отправлено: kambala от Сентябрь 07, 2013, 18:14 интересно, зачем было вводить в язык 3 разных операции, если они работают одинаково?
куда именно смотреть по ссылке я не понял, там | вообще не упоминается. Название: Re: О чем предупреждает Qt? Отправлено: Alexu007 от Сентябрь 07, 2013, 18:21 Вот тут точно, извините... http://cppalgo.blogspot.ru/2010/07/ab.html
Название: Re: О чем предупреждает Qt? Отправлено: kambala от Сентябрь 07, 2013, 19:46 логически верно тут использовать ||
Название: Re: О чем предупреждает Qt? Отправлено: lit-uriy от Сентябрь 08, 2013, 13:02 вообще компилятор в данном случае прав. Лучше использовать скобки, т.к. у них самый высокий приоритет и для человека они интуитивно понятны.
П.С. Qt тут ни о чем не предупреждает, и тема вообще не имеет ни какого отношения к Qt. Надо переместить в раздел Компиляторы или Языки Название: Re: О чем предупреждает Qt? Отправлено: Alexu007 от Сентябрь 09, 2013, 07:59 C функциями всё работало. Решил сделать класс работы с длинными числами:
Код
Ругается на прототипы функций, что == (и остальные за ним) должны иметь только один аргумент. Чё за фигня? Функции 100% рабочие. Название: Re: О чем предупреждает Qt? Отправлено: Bepec от Сентябрь 09, 2013, 08:09 Правильно говорит. Первый и единственный аргумент - константный класс, который вы передаёте для работы.
А то, что у вас вторым указано - оно уже есть и не нуждается в передаче. Это будет всегда this. PS откройте учебник C++ и почитайте про переопределение операторов. Название: Re: О чем предупреждает Qt? Отправлено: Alexu007 от Сентябрь 09, 2013, 08:16 Да, но без классов с функциями всё работает. Что за константный класс?
Название: Re: О чем предупреждает Qt? Отправлено: Bepec от Сентябрь 09, 2013, 08:21 Цитировать PS откройте учебник C++ и почитайте про переопределение операторов. Там всё разжёвано, по русски, внятным языком. Как именно надо переопределять операторы классов. Название: Re: О чем предупреждает Qt? Отправлено: Igors от Сентябрь 09, 2013, 13:15 Код
Название: Re: О чем предупреждает Qt? Отправлено: Alexu007 от Сентябрь 09, 2013, 20:05 До переопределения операторов ещё не дошёл пока. Как то нестабильно оно работает...
файл bigintdec.h: Код
файл widget.cpp: Код
Так всё работает, но если перенести реализацию функций-членов в файл bigintdec.срр, а в объявлении класса оставить прототипы, и пересобрать проект - вылезает 3 ошибки: C:\QtSDK\Alexu007\LongArifm\LA1\widget.cpp:140: ошибка: undefined reference to `BI::input(QString)' C:\QtSDK\Alexu007\LongArifm\LA1\widget.cpp:144: ошибка: undefined reference to `BI::output(BI)' :-1: ошибка: collect2: ld returned 1 exit status (внизу красными буквами "файл не найден"). Чё за фигня, файл не найден, как я понимаю - bigintdec.срр, оттуда реализации функций теряются - но он к проекту подключён... Название: Re: О чем предупреждает Qt? Отправлено: LisandreL от Сентябрь 09, 2013, 20:32 При переносе в cpp название класса перед названием функций добавить не забыли?
Название: Re: О чем предупреждает Qt? Отправлено: Alexu007 от Сентябрь 09, 2013, 20:53 При переносе в cpp название класса перед названием функций добавить не забыли? Забыл. Спасибо. Заработало. Ну геморой!!!Ещё вопросик, пжалста. При использовании в программе перед каждым вызовом функции-члена указывается вызывающий её объект (я с этим долго тормозил, никак понять не мог, чего ещё от меня хотят...): Цитировать BI bdj1; BI bdj2; bdj1 = bdj1.input(str); bdj2 = bdj1; ui->lineEdit_3->setText(bdj2.output(bdj2)); Это значит для каждой копии объекта свои копии функций создаются, что-ли? Если-бы вызывались, например BI.input() - то понятно, функция input класса BI - но так не работает, а нафига перед каждой функцией название её объекта? А если объекты в цикле создаются сотнями, как к ним в программе обращаться? Название: Re: О чем предупреждает Qt? Отправлено: Alex Custov от Сентябрь 09, 2013, 21:03 а нафига перед каждой функцией название её объекта? Начни уже учить С++, сколько ты ещё будешь задавать вопросы, о которых написано в любой обучающей книжке для начинающих? Название: Re: О чем предупреждает Qt? Отправлено: Alexu007 от Сентябрь 11, 2013, 16:52 Как получить код символа QString? QString str = "12AB"; Нужно каждый символ в int перевести: "1" = 1, "A" = 10 и т.д.
Название: Re: О чем предупреждает Qt? Отправлено: gil9red от Сентябрь 11, 2013, 17:57 Код: for(int i = 0; i < str.size(); i++) Или вы про перевод в другую систему счисления? тогда, Код: bool b; Название: Re: О чем предупреждает Qt? Отправлено: Alexu007 от Сентябрь 11, 2013, 21:20 Спасиб, наверху то что надо. Мне не нужен авт. перевод в hex, нужно брать число по одной цифре(букве) и помещать в инт: 1 - 1, 9 -9, А - 10 и т.д.
Прога работает с dec, хочу "приучить её и к hex. Название: Re: О чем предупреждает Qt? Отправлено: lit-uriy от Сентябрь 13, 2013, 20:42 Alexu007, ты сделал функцию членом класса, стало быть один аргумент функции уже появился - объект (экземпляр этого класса).
т.е. убери "левый" аргумент (им будет экземпляр класса) в теле функуии вместо него используй указатель this. либо, сделай функцию дружественной данному классу, тогда можешь всё оставить как есть. И, к стати, операторы типа "+" (не "+=") следует делать константными Книжку могу порекомендовать: Герб Саттер и Андрей Александреску "Стандарты программирования на С++" Название: Re: О чем предупреждает Qt? Отправлено: lit-uriy от Сентябрь 13, 2013, 20:43 чёт я запоздал с ответом :)
Название: Re: О чем предупреждает Qt? Отправлено: Bepec от Сентябрь 14, 2013, 10:09 Вторая страница всегда незаметна :) С каждым бывает.
|