Хронология нашего диалога не имеет никакого отношения к наличию ошибки.
А что Вам мешало сразу этот конкретный пример привести?
Здесь вызывается ::f(), а в чем ошибка? В предупреждении? Оно говорит лишь о том, что в будущем порядок будет изменен. А будет ли в будущем (вместо предупреждения) ошибка или нет - здесь заранее сказать нельзя - зависит от того как Разработчики реализуют. Соответственно предупреждение в любом случае полезно, что не попасть в просак
А что Вам мешало сразу этот конкретный пример привести?
Он и был приведен. Дальнейшая реакция мне непонятна.
Здесь вызывается ::f(), а в чем ошибка? В предупреждении? Оно говорит лишь о том, что в будущем порядок будет изменен. А будет ли в будущем (вместо предупреждения) ошибка или нет - здесь заранее сказать нельзя - зависит от того как Разработчики реализуют. Соответственно предупреждение в любом случае полезно, что не попасть в просак
А что Вам мешало сразу этот конкретный пример привести?
Здесь вызывается ::f(), а в чем ошибка? В предупреждении? Оно говорит лишь о том, что в будущем порядок будет изменен. А будет ли в будущем (вместо предупреждения) ошибка или нет - здесь заранее сказать нельзя - зависит от того как Разработчики реализуют. Соответственно предупреждение в любом случае полезно, что не попасть в просак
Мы планируем устранить родовую ошибку MQL компилятора, при объявлении фукнции внутри скопа, она должна переопределять (не путать с перегрузкой) "внешние" для данного скопа функции с такими же именами (например глобальные или по наследованию)
Сразу отключать не стали, пока выдаём предупреждение.
Родовая ошибка была осознанной, т.к. в MQL не было полноценной поддержки скопов, которую мы почти полностью реализовали в последних версиях компилятора.
Просьба показать на простом примере, каким будет планируемое поведение.
Из простого:
struct A
{
int x;
void func(int,int)
{
}
};
struct B : A
{
void func(int)
{
}
};
voidOnStart(void)
{
B b;
b.func(10,10); // будет ошибка, в B нет функции func с двумя параметрами, она скрыта func с одним параметром
b.A::func(10,10); // OK, в A такая функция имеется
}
А вот пример кода, за который мы переживаем
struct A
{
int x;
void func(int)
{
printf("%s",__FUNCSIG__);
}
};
struct B : A
{
void func(double)
{
printf("%s",__FUNCSIG__);
}
};
voidOnStart(void)
{
B b;
b.func((int)1); // !! будет вызвана B::func(double)
b.A::func((int)1); //ОК, вызов A::func(int)
}
На первое время будем проверять наличие более точной по параметрам функции во "внешем" скопе, если обнаружится то будет предупреждение и совет, как его обойти.
На первое время будем проверять наличие более точной по параметрам функции во "внешем" скопе, если обнаружится то будет предупреждение и совет, как его обойти.
Спасибо, понятно. Этот код будет выдавать ошибку "'1' - parameter passed as reference, variable expected", потому что ::f(...) будет невидима для вызова f(...)?
void f( constint ) {}
class A
{
staticvoid f( constint& ) {}
staticvoid Func( void )
{
// По сигнатурам очевидно, что A::f не может быть вызван, т.к. передача не по ссылке. Поэтому предупреждение ошибочное.
f(1); // WARNING: deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
}
};
Спасибо, понятно. Этот код будет выдавать ошибку "'1' - parameter passed as reference, variable expected", потому что ::f(...) будет невидима для вызова f(...)?
Да, этот код будет выдавать ошибку компиляции и первое время (пока не определили сколько) будем давать совет:
"Возможно вы забыли указать '::' перед именем функции"
при объявлении фукнции внутри скопа, она должна переопределять (не путать с перегрузкой) "внешние" для данного скопа функции с такими же именами (например глобальные или по наследованию)
Это уточнение убрало все неоднозначности в понимании.
Хронология нашего диалога не имеет никакого отношения к наличию ошибки.
А что Вам мешало сразу этот конкретный пример привести?
Здесь вызывается ::f(), а в чем ошибка? В предупреждении? Оно говорит лишь о том, что в будущем порядок будет изменен. А будет ли в будущем (вместо предупреждения) ошибка или нет - здесь заранее сказать нельзя - зависит от того как Разработчики реализуют. Соответственно предупреждение в любом случае полезно, что не попасть в просак
А что Вам мешало сразу этот конкретный пример привести?
Он и был приведен. Дальнейшая реакция мне непонятна.
Здесь вызывается ::f(), а в чем ошибка? В предупреждении? Оно говорит лишь о том, что в будущем порядок будет изменен. А будет ли в будущем (вместо предупреждения) ошибка или нет - здесь заранее сказать нельзя - зависит от того как Разработчики реализуют. Соответственно предупреждение в любом случае полезно, что не попасть в просак
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 3091: Улучшения в работе
fxsaber, 2021.11.16 21:10
Имеется в виду ошибочность warning.
Все. Сожрали мое время.
Он и был приведен. Дальнейшая реакция мне непонятна.
Все. Сожрали мое время.
Там похожий код, но другой
Warning не ошибочна - и я объяснил почему
А что Вам мешало сразу этот конкретный пример привести?
Здесь вызывается ::f(), а в чем ошибка? В предупреждении? Оно говорит лишь о том, что в будущем порядок будет изменен. А будет ли в будущем (вместо предупреждения) ошибка или нет - здесь заранее сказать нельзя - зависит от того как Разработчики реализуют. Соответственно предупреждение в любом случае полезно, что не попасть в просак
Мы планируем устранить родовую ошибку MQL компилятора, при объявлении фукнции внутри скопа, она должна переопределять (не путать с перегрузкой) "внешние" для данного скопа функции с такими же именами (например глобальные или по наследованию)
Сразу отключать не стали, пока выдаём предупреждение.
Родовая ошибка была осознанной, т.к. в MQL не было полноценной поддержки скопов, которую мы почти полностью реализовали в последних версиях компилятора.
Мы планируем устранить родовую ошибку MQL компилятора
Просьба показать на простом примере, каким будет планируемое поведение.
Просьба показать на простом примере, каким будет планируемое поведение.
Из простого:
А вот пример кода, за который мы переживаем
На первое время будем проверять наличие более точной по параметрам функции во "внешем" скопе, если обнаружится то будет предупреждение и совет, как его обойти.
На первое время будем проверять наличие более точной по параметрам функции во "внешем" скопе, если обнаружится то будет предупреждение и совет, как его обойти.
Спасибо, понятно. Этот код будет выдавать ошибку "'1' - parameter passed as reference, variable expected", потому что ::f(...) будет невидима для вызова f(...)?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 3091: Улучшения в работе
fxsaber, 2021.11.17 11:10
Спасибо, понятно. Этот код будет выдавать ошибку "'1' - parameter passed as reference, variable expected", потому что ::f(...) будет невидима для вызова f(...)?
Да, этот код будет выдавать ошибку компиляции и первое время (пока не определили сколько) будем давать совет:
"Возможно вы забыли указать '::' перед именем функции"
при объявлении фукнции внутри скопа, она должна переопределять (не путать с перегрузкой) "внешние" для данного скопа функции с такими же именами (например глобальные или по наследованию)
Это уточнение убрало все неоднозначности в понимании.