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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: О чем предупреждает Qt?  (Прочитано 13379 раз)
Alexu007
Гость
« : Сентябрь 07, 2013, 15:58 »

При запуске программы выскакивает предупреждение, сама же программа компилируется и работает правильно. На что он ругается?

C:\QtSDK\Alexu007\LongArifm\LA1\widget.cpp:158: предупреждение: suggest parentheses around comparison in operand of '|'

ругается на эту строчку в программе, тут цикл выполняется дополнительно ещё раз, если r равно 1:

Код
C++ (Qt)
for (int j=0 ; j < b.amount | r; j++)
       {
        ....
       }
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #1 : Сентябрь 07, 2013, 16:07 »

1. даже гуглтранслейт нормально переводит сообщение. Компилятор тебе намекает что неплохо бы расставить скобочки вокруг '|' .
2. Ну и вообще условие выхода из цикла какое то странное. Ты вообще можеш сказать нафига оно такое странное и  что будет результатом выражения
Код
C++ (Qt)
j < b.amount | r
   Шокированный
Записан
Alexu007
Гость
« Ответ #2 : Сентябрь 07, 2013, 16:41 »

В конце цикла если j == b.amount и r = 1 - цикл делает ещё один проход. Одинаково работает:

 
Код
C++ (Qt)
j < b.amount + r

если r = 0 цикл заканчивается, если 1 - выполняется ещё раз
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Сентябрь 07, 2013, 16:50 »

Приоритет + выше сравнения, так и делайте, а использование битового | здесь мозголомка не вызванная никакой необходимостью
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #4 : Сентябрь 07, 2013, 17:14 »

В конце цикла если j == b.amount и r = 1 - цикл делает ещё один проход.
Это ты написал что ты думаеш что оно так работает.
Вопрос: сколько будет циклов если amount == 11 и r == 1, и сколько, если r == 0 ?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #5 : Сентябрь 07, 2013, 17:53 »

Alexu007, кажется ты попутал побитовое и логическое ИЛИ
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Alexu007
Гость
« Ответ #6 : Сентябрь 07, 2013, 18:09 »

Это вот отсюда взято: http://cppalgo.blogspot.ru/2010/05/blog-post.html

|  || и + работают одинаково, я проверял. Автор почему-то выбрал именно |.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #7 : Сентябрь 07, 2013, 18:14 »

интересно, зачем было вводить в язык 3 разных операции, если они работают одинаково?

куда именно смотреть по ссылке я не понял, там | вообще не упоминается.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Alexu007
Гость
« Ответ #8 : Сентябрь 07, 2013, 18:21 »

Вот тут точно, извините... http://cppalgo.blogspot.ru/2010/07/ab.html
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #9 : Сентябрь 07, 2013, 19:46 »

логически верно тут использовать ||
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Сентябрь 08, 2013, 13:02 »

вообще компилятор в данном случае прав. Лучше использовать скобки, т.к. у них самый высокий приоритет и для человека они интуитивно понятны.

П.С.
Qt тут ни о чем не предупреждает, и тема вообще не имеет ни какого отношения к Qt.
Надо переместить в раздел Компиляторы или Языки
Записан

Юра.
Alexu007
Гость
« Ответ #11 : Сентябрь 09, 2013, 07:59 »

C функциями всё работало. Решил сделать класс работы с длинными числами:

Код
C++ (Qt)
class BI
{
public:
   BI();
 
 
   struct BigInt
       {
       int amount;               // количество цифр в числе
       int digits[maxlen];      // массив цифр в обратном порядке
       };
 
 
  // ввод
  void input(BigInt, const QString);
 
  // вывод
  QString output(const BigInt);
 
  // операторы сравнения
  bool operator == (const BigInt, const BigInt);
 
  bool operator > (const BigInt, const BigInt);
 
  bool operator < (const BigInt, const BigInt);
 
  // длинное сложение
  BigInt operator + (const BigInt, const BigInt);
 
  // беззнаковое вычитание (всегда меньшее из большего)
  BigInt operator - (const BigInt, const BigInt);
 
  // умножение на короткое int
  BigInt operator * (const BigInt, const int);
 
  // длинное умножение
  BigInt operator * (const BigInt, const BigInt);
 
  // длинное деление
  BigInt operator / (const BigInt, const BigInt);
 
  // остаток длинного деления
  BigInt operator % (const BigInt, const BigInt);
 
 
};

Ругается на прототипы функций, что == (и остальные за ним) должны иметь только один аргумент. Чё за фигня? Функции 100% рабочие.
Записан
Bepec
Гость
« Ответ #12 : Сентябрь 09, 2013, 08:09 »

Правильно говорит. Первый и единственный аргумент - константный класс, который вы передаёте для работы.

А то, что у вас вторым указано - оно уже есть и не нуждается в передаче. Это будет всегда this.

PS откройте учебник C++ и почитайте про переопределение операторов.
Записан
Alexu007
Гость
« Ответ #13 : Сентябрь 09, 2013, 08:16 »

Да, но без классов с функциями всё работает. Что за константный класс?
Записан
Bepec
Гость
« Ответ #14 : Сентябрь 09, 2013, 08:21 »

Цитировать
PS откройте учебник C++ и почитайте про переопределение операторов.

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


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