Общайтесь с разработчиками через Сервисдеск! - страница 9

 
Rosh:
Лично я могу только догадываться, что у Вас там произошло. Предоставьте заявку в Сервисдеск, тогда точнее скажут. Ваше сообщение не менее туманно для меня.

Я в принципе о том чтобы компилятор анализировал код на возможные ошибки при перегрузке.

К примеру вот так правильно (все нормально работает)

//Как вариант №1
color ColorBackground(long ID);
bool  ColorBackground(color NewColor,long ID);
//Как вариант №2
color ColorBackground();
bool  ColorBackground(color new_color);

А так не правильно (верней может работать, а может и нет, в зависимости от условий вызова)

//Как вариант №1
color ColorBackground(long ID=0);
bool  ColorBackground(color NewColor,long ID=0);
//Как вариант №2
color ColorBackground(long ID);
bool  ColorBackground(color NewColor,long ID=0);

Тут происходит кализия, при которой в одом случае (при компиляции модуля) компилятор не видит (следовательно не находит ошибок), а при вызове функций явыным образом говорит что есть ошибка.

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

Хотя если рассматривать второй вариант из "неправильных" то я к примеру понять не могу почему ситуация приводит к ошибке (верней могу, но у меня вопросы возникают).

Рассмотрим оба "неправильных" варианта.

Тут по логике вещей если не определять параметры явно должна вызываться функция

color ColorBackground();

При этом подразумевается что определяется цвет текущего графика

Даже если мы явно указываем параметр, компилятор не может определиться какую функцию я хочу в итоге вызвать (как я понимаю поскольку компилятор не разбирается в том передается в функцию тип color или long). таким образом вот такой вызов становится для него ошибочным (поскольку компилятор не видит различия в параметрах)

color ColorBackground(0);
bool  ColorBackground(Black);

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

bool  ColorBackground(Black,0);

PS

Да ладно, бог с этой ошибкой (ну или не ошибкой). лучше обратите внимание на мою заявку в сервисдеске #23172 и вот это обсуждение...

 
Interesting:

Я в принципе о том чтобы компилятор анализировал код на возможные ошибки при перегрузке.

Напишите в Сервисдеск, я не могу по кускам кода понять ничего. Может кто из форумян поймет, у меня не получается разгадывать головоломки. Неужели так сложно предоставить полный код? Здесь лучше уже не выкладывать, и так много ни о чем написано.
 
Rosh:
Напишите в Сервисдеск, я не могу по кускам кода понять ничего. Может кто из форумян поймет, у меня не получается разгадывать головоломки. Неужели так сложно предоставить полный код? Здесь лучше уже не выкладывать, и так много ни о чем написано.

Ладно, будет заявка в сервисдеск. Но кажется итак все ясно объяснил - Пишем класс, на подобии того что имеется в стандартной библиотеки. В классе есть перегружаемые функции, некоторые из параметров которых охота сделать дефаултными (чтобы не указывать их постоянно без надобности).

Если без дефаултных параметров то все ОК, но в нашем случае хочется иметь предупреждение на этапе создания класса, а не ошибку при вызове его функционала...

PS

Заявка оформлена. Красиво получилось, прошу разработчиков обратить внимание за заявки #23172 и #24172 (первая на мой взгляд имеет больший интерес и приоритет)...


 
Rosh:
Напишите в Сервисдеск, я не могу по кускам кода понять ничего. Может кто из форумян поймет, у меня не получается разгадывать головоломки. Неужели так сложно предоставить полный код? Здесь лучше уже не выкладывать, и так много ни о чем написано.

Я так понял, из разъяснений Рената и по логике вещей, что компилятор на этапе компиляции перегружаемых методов класса с дефолтными параметрами не предупреждает о возможной неоднозначности, а выдаёт ошибку только при вызове этих неоднозначных методов.

Interesting:

Если без дефаултных параметров то все ОК, но в нашем случае хочется иметь предупреждение на этапе создания класса, а не ошибку при вызове его функционала...

Получилось "масло маслянное"...

 
Valmars:

Я так понял, из разъяснений Рената и по логике вещей, что компилятор на этапе компиляции перегружаемых методов класса с дефолтными параметрами не предупреждает о возможной неоднозначности, а выдаёт ошибку только при вызове этих неоднозначных методов.

Компилятор работает абсолютно верно.

Он не может ругаться в указанном случае, ибо в прототипах все нормально - разное количество параметров (пусть даже некоторые из них заполнены умолчаниями). Если будут использоваться перегруженные методы с полным набором параметров, то все скомпилируется без ошибок.

Компилятор абсолютно правильно сообщает о невозможности точно подобрать нужную функцию при вызове с не полностью заполненным списком параметров, где под вызов подходят две или более функции.

Почему две потенциальные функции на вызов? Потому что кто-то совершенно не думал, когда описывал второй параметр умолчательно.

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

Последние пару дней терминал отрубается при открытии окна тестера. В чем может быть проблема? Как раз 15.12 был новый билд, может из-за него? До сих пор работало все нормально. Перегружал и переустанавливал несколько раз, безуспешно.

Time : 2010.12.18 19:46 (0:02:18)
Program : Client Terminal
Version : 500.370 (15 Dec 2010)
Revision : 27654
OS : Windows 7 Professional (Build 7600)
Processors : 4 x X86 (level 6)
Memory : 1833392/795584 kb
Virtual : 2097024/1800948 kb
CrashMD5 : 3911FA0C9824ADAF76FA3234759FC4B7
Exception : C0000005 at 772820CB write to 5F6F0001

Modules : 00400000 00955000 terminal.exe (5.0.0.370)
: 16080000 00019000 mdnsnsp.dll (1.0.3.1)
: 69A70000 00008000 pshook.dll (3.1.1.72)

77281FA1:0012A [772820CB] RtlIdentifierAuthoritySid (ntdll.dll)
7728A44C:001AB [7728A5F7] RtlCopyString (ntdll.dll)

Registers : EAX=5F6F0001 EIP=772820CB EFLGS=00010206 ES=0023
: EBX=F1100200 ESP=0012D93C EBP=0012D970 FS=003b
: ECX=000221DB ESI=05DD17C3 CS=001b GS=0000
: EDX=00000002 EDI=F1100000 DS=0023 SS=0023

Аналогичная ситуация описана здесь: https://www.mql5.com/ru/forum/1111/page239

 
Остановите терминал, удалите все *.ex5 файлы и запустите терминал. При необходимости перекомпилируйте нужные файлы.
 

В сервисдеске новая заявка с 15 декабря висит.... ни одного ответа не было...

Это в связи с серьёзной загрузкой или барахлит что?


 
AlexSTAL:

В сервисдеске новая заявка с 15 декабря висит.... ни одного ответа не было...

Это в связи с серьёзной загрузкой или барахлит что?


Ваша заявка не пропала даром. Она есть и ее видели.

Ответ Вы получите в ближайшее время.

Причина обращения: