Обсуждение статьи "Графические интерфейсы XI: Интеграция графической стандартной библиотеки (build 16)" - страница 7
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
попробовал изменить в файле ElementBase.mqh, ругается еще сильнее
И в ElementBase.mqh и в Element.mqh нужно менять
В последних билдах мы добавили в компилятор сообщение для тех случаев, когда в потомке происходит перегрузка метода предка:
Пример
В данном случае в классе-потомке SBar происходит вызов функции func(int) предка SFoo, так как компилятор не нашел его в потомке. В потомке есть только функция func(double), и компилятор пытается найти функцию с подходящим параметром в дереве наследования.
То есть компилятор MQL5 вместо переопределения метода в потомке производит перегрузку. В начале развития языка такое послабление компилятора MQL5 не считалось критическим. Но в будущем это может быть изменено, поэтому теперь выдается явное предупреждение, чтобы разработчики программм на MQL5 приняли во внимание и исправили свои коды.
Строго говоря, переопределение немного более широкое понятие, вы можете сами поискать в интернете разницу между перегрузкой и переопределением
1. Правильно ли, что такой код не компилируется?
2. Правильно ли, что вот такой код, помимо вышеупомянутой ошибки, выдает предупреждение "deprecated behavior, hidden method calling will be disabled in a future MQL compiler version TestCompiler.mq5 27 18"?
1. Правильно ли, что такой код не компилируется?
2. Правильно ли, что вот такой код, помимо вышеупомянутой ошибки, выдает предупреждение "deprecated behavior, hidden method calling will be disabled in a future MQL compiler version TestCompiler.mq5 27 18"?
Может это лучше спросить в ветке про новую версию терминала? ) Думаю, там быстрее ответят )
Предупреждение вроде бы вписывается в новую логику компилятора, в вот про private member тоже не понял, все же public...
И в ElementBase.mqh и в Element.mqh нужно менять
в ElementBase.mqh понятно, вы заменили "Is" на "Set" (но не понятно почему мы можем это сделать)
а в Element.mqh другая строчка
в ElementBase.mqh понятно, вы заменили "Is" на "Set" (но не понятно почему мы можем это сделать)
а в Element.mqh другая строчка
Ну не нравится сейчас MQ одинаковые имена (переменных, методов и тп) :)
Мы просто сменили имя метода (а почему нет? ) )
Не хочется ничего менять - ждем пока автор все переделает )
автор, вероятно, "закончил" с этим проектом, можете конкретнее указать в каких строчках что написать чтобы компилятор не ругался, а лучше конечно православные (исправленные) файлики ( ElementBase.mqh и в Element.mqh) для народа
1. Я сейчас занимаюсь другим проектом.
2. У меня очень сильно изменена библиотека )
Ну и кроме изменений в ElementBase.mqh и в Element.mqh нужно пройтись по всем элементам, может и там есть эти методы.
Может это лучше спросить в ветке про новую версию терминала? ) Думаю, там быстрее ответят )
Предупреждение вроде бы вписывается в новую логику компилятора, в вот про private member тоже не понял, все же public...
Нашел там обходной путь:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 4 build 1170
fxsaber, 2019.09.06 09:39
Считаю, что предложенный вариант в MT5 - нововведение, которое должно быть добавлено и в MT4.
Но если писать код по-старинке, то работать будет везде.
Вот так мой пример работает:
CC(void) { ((CA)m_b).func(); }
Но это не выход, конечно.
@Ilyas, без приведения к CA нет варианта?
@Ilyas, без приведения к CA нет варианта?
1. у Вас наследование приватное
class CB : CA
2. правильное предупреждение, по правилам теперь так:
CC(void) { m_b.CA::func(); }