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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Предупреждение ISO C++ says that these are ambiguous...  (Прочитано 10847 раз)
Максим
Гость
« : Август 05, 2016, 17:03 »

Доброго времени суток.
Есть у меня конструкция типа:

Код:
#define NAK 0x15

Компилятор MinGW на неё выдаёт предупреждение:
Цитировать
ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second

Что он пытается мне этим сказать?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Август 05, 2016, 18:17 »

на какую строчку выдается предупреждение? прямо на дефайн?
Записан

Изучением 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
Максим
Гость
« Ответ #2 : Август 05, 2016, 23:54 »

Цитировать
прямо на дефайн?
да
Записан
Максим
Гость
« Ответ #3 : Август 05, 2016, 23:55 »

Собственно, у меня с десяток таких дефайнов, чтобы уйти от магических чисел. На каждый из них компилятор недовольно бурчит.
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #4 : Август 06, 2016, 00:25 »

Компилятор MinGW на неё выдаёт предупреждение:
Цитировать
ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second

MinGW какой версии?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Август 06, 2016, 06:18 »

Попробуйте десятичное 21 или даже константу
Код
C++ (Qt)
const int NAK = 0x15;
 
Записан
Bepec
Гость
« Ответ #6 : Август 06, 2016, 09:15 »

На мой взгляд у вас где то имеется переменная NAK. Проверьте на всякий случай.

PS обычно ошибка ведёт на дефайн, но перед или после ошибки есть уточнения, не выделяемые ошибкой, но ведущие на строки где эта ошибка произошла. Это если в креаторе.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Август 06, 2016, 09:27 »

На мой взгляд у вас где то имеется переменная NAK. Проверьте на всякий случай.
Тогда однозначно ошибка (а не предупреждение). Если уж гадать - то, возможно, он понимает этот литерал как "unsigned", и когда дело доходит до присвоения - начинает вякать.
Записан
Максим
Гость
« Ответ #8 : Август 08, 2016, 09:00 »

Цитировать
возможно, он понимает этот литерал как "unsigned", и когда дело доходит до присвоения - начинает вякать.
Нет, контекстная подсказка говорит, что это для него знаковый int.
Может компилятору в принципе не нравится факт определения числа дефайном? В мануалах, к шарпу, например, прямым текстом написано, что не рекомендуется в таких случаях пользоваться дефайном - задавайте, мол, константы.
« Последнее редактирование: Август 08, 2016, 09:15 от Максим » Записан
Максим
Гость
« Ответ #9 : Август 08, 2016, 09:14 »

MinGW какой версии?

5.3.0
« Последнее редактирование: Август 08, 2016, 09:23 от Максим » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Август 08, 2016, 10:00 »

Прогони через препроцессор ( g++ -E file.cpp [options] > file.cpp.out ) и посмотри в выводе как раскрываются твои defines.
Записан

Qt 5.11/4.8.7 (X11/Win)
Максим
Гость
« Ответ #11 : Август 08, 2016, 10:28 »

Прогони через препроцессор ( g++ -E file.cpp [options] > file.cpp.out ) и посмотри в выводе как раскрываются твои defines.
Я под виндой
Записан
Brono
Гость
« Ответ #12 : Август 08, 2016, 10:54 »

... Я под виндой

"Под виндой" Qt обычно добавляет терминал, через который это можно сделать. Посмотри в "Пуск->...->Qt->{версия Qt}->{версия компилятора}->Qt ... for Desktop ... (с иконкой терминала)". В запустившемся терминале можно вызвать g++ (Проверено только что на Win7)
Записан
Максим
Гость
« Ответ #13 : Август 08, 2016, 12:01 »

"Под виндой" Qt обычно добавляет терминал, через который это можно сделать. Посмотри в "Пуск->...->Qt->{версия Qt}->{версия компилятора}->Qt ... for Desktop ... (с иконкой терминала)". В запустившемся терминале можно вызвать g++ (Проверено только что на Win7)

Да, есть такое. Но при попытке запуска, указав файл cpp, где эти дефайны применяются получил:
Цитировать
имя_файла.h: fatal error :QObject: No such file or directory compilation terminated

Пробовал копировать эти файлы в каталог с g++.exe и запускать команду оттуда. Тот-же результат
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #14 : Август 08, 2016, 12:25 »

Цитировать
ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second
Что он пытается мне этим сказать?

Здесь дело не в определении #define, а в месте использования NAK в коде. Возможно, NAK участвует в арифметических операциях или операциях сравнения с типом, отличным от int, например short.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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