Ошибки, баги, вопросы - страница 3346
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день.
В последних версиях терминала появился такой деффект:
Как я понимаю функция SocketSend работает асинхронно. Какой бы большой буффер данных не передавался ей на вход, она сразу возвращает управление, а реальная передача данных происходит фоном для эксперта.
Если в этот момент позвать функцию SocketIsConnected то она возвращает false, при этом в _LastError 0.
Это новое (и на мой взгляд неверное) поведение поломало имеющийся код. Для себя проблему решил отправкой данных маленькими кусками, но хотелось бы услышать мнение кого-то из команды разработчиков.
Спасибо.
Ошибка при компиляции, а в другом случае нормально: А какая принципиальная разница между (1) и (2) ?
Если объявляете статическую переменную, то следует ее и определить.
Попробуйте добавить в класс метод обращающийся к переменной и уже получите ошибку компиляции в коде класса
А принципиальная разница между вашими случаями (1) и (2) следующая (очень грубо):
Во втором случае вы объявляете глобальную переменную-экземпляр класса. Компилятору необходимо выделить память для нее и всего связанного с классом и здесь же компилятор пытается понять куда указывает имя `A::i`.
А в первом случае вы объявляете глобальную переменную-указатель на экземпляр класса. Здесь компилятору надо выделить память только для указателя, а сам объект будет создан уже в процессе выполнения программы.
Если объявляете статическую переменную, то следует ее и определить.
Определил ниже, почему ошибка не исчезла?
И в чем тогда уже принципиальная разница между: и ???Определил ниже, почему ошибка не исчезла?
До того как Вы определили A::i компилятору нужно создать глобальный экземпляр класса и ему нужно знать куда ссылается A::i. Мне кажется такой ситуации не возникло бы, если бы MQL5 код сначала компилировался в объектные файлы, а потом компоновался в исполняемый (на пример как в С/С++).
А на вопрос про принципиальную разницу я ответил в предыдущем сообщении. Здесь ровно та же самая ситуация в певом случае имеем только указатель на экземпляр (объект) класса, во втором сам экземпляр.
А на вопрос про принципиальную разницу я ответил в предыдущем сообщении. Здесь ровно та же самая ситуация в певом случае имеем только указатель на экземпляр (объект) класса, во втором сам экземпляр.
Возвращаюсь к первоначальному примеру:
Почему С\С++ создает исполняемый файл без ошибок, а в MQL ошибка уже на этапе компиляции?
Вы объяснили, почему в MQL возникает ошибка - компилятору чего то там не хватает, а почему в C\C++ всего хватает?Почему С\С++ создает исполняемый файл без ошибок, а в MQL ошибка уже на этапе компиляции?
Потому что компиляторы С/С++ и MQL работают по-разному. Очевидно же :)
А в чем принципиальная разница работы, применительно к конкретному примеру?
Чем MQL компилятор хуже C\C++ ?
До того как Вы определили A::i компилятору нужно создать глобальный экземпляр класса и ему нужно знать куда ссылается A::i. Мне кажется такой ситуации не возникло бы, если бы MQL5 код сначала компилировался в объектные файлы, а потом компоновался в исполняемый (на пример как в С/С++).
А на вопрос про принципиальную разницу я ответил в предыдущем сообщении. Здесь ровно та же самая ситуация в певом случае имеем только указатель на экземпляр (объект) класса, во втором сам экземпляр.