Ошибки, баги, вопросы - страница 2520
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Непонятное предупреждение при компиляции
С типом int опечатка, я полагаю?
Да... исправил везде на void - для простоты.
С другой стороны так тоже смысл, но уже предупреждения (*) не ясен
lib.h - общий файл с объявлениями, а lib.mq5, lib2.mq5, lib3.mq5... файлы с реализациями, которые подключаются посредством #include по необходимости. Таким образом реализации int g() в конкретной сборке может и не быть вообще, а непонятное предупреждение - есть. Фактически их там сотни - и они мешают увидеть действительно важные предупрежденияДа... исправил везде на void - для простоты.
С другой стороны так тоже смысл, но уже предупреждения (*) не ясен
lib.h - общий файл с объявлениями, а lib.mq5, lib2.mq5, lib3.mq5... файлы с реализациями, которые подключаются посредством #include по необходимости. Таким образом реализации int g() в конкретной сборке может и не быть вообще, а непонятное предупреждение - есть. Фактически их там сотни - и они мешают увидеть действительно важные предупрежденияДа, неприятно. Причём даже если в том же инклюднике прописать реализацию, то предупреждение тоже вылазит.
Отдельное внимания заслуживает следующая ошибка:
По сути похожа на эту, но при наличии множества файлов довольно неочевидная и труднопостижимая
fxsaber:
Подскажите, как в C++ с этим? Задумался, использовать эту фишку в своем коде или нет. Если в C++ работает, буду использовать. Нет - вряд ли, т.к. могут отменить в следующих билдах.
b = a; a = b; // OKПервое присваивание работает только в MQL. И очень плохо, что оно работает. Хотелось бы, чтоб отменили, наконец, это недоразумение. Со вторым - проблем нет.
Первое присваивание работает только в MQL. И очень плохо, что оно работает. Хотелось бы, чтоб отменили, наконец, это недоразумение. Со вторым - проблем нет.
Странно. Я считал, что первое работать обязано, а второе - нет.
Странно. Я считал, что первое работать обязано, а второе - нет.
Ну вот видимо и разработчики MQL тоже не совсем понимают суть присваивания. Ибо я им талдычу об этой проблеме уже давно, но как об стену горох.
Суть присваивания в том, что объекту присваивается эквивалентный объект. Т.е. того же типа. Это значит, что правый объект сначала неявно кастится к типу левого объекта, а потом уже происходит присваивание (копирование). И в первом случае естественно такой кастинг (A->B) невозможен. В C++ будет ошибка. А в MQL вместо этого левый объект кастится к правому и выполняется A::operator=(A&), замещая лишь часть объекта b. Разве это присваивание?
Представьте, что вы лонгу присваиваете инт, но происходит только замещение первых четырёх байт, а остальная часть остаётся нетронутой. Вот здесь то же самое.
Представьте, что вы лонгу присваиваете инт, но происходит только замещение первых четырёх байт, а остальная часть остаётся нетронутой. Вот здесь то же самое.
Так это удобно, вроде. В контексте структур, конечно.