Есть структура:
Если есть 2 её экземпляра, скажем так, signal1 и signal2 их кроме как поэлементно я так понимаю сравнить нет возможности?
Вот так не выходит:
Присвоить одну структуру другой тоже нельзя, вот так:
Какие тогда есть варианты вообще? Я смотрю, что в мкл структуру какие-то странные. Функционала нет. Назначение их как я вижу лишь название общее у группы переменные т.е. объединение по свойству и передача куда-нить. Хотя, по сути, всё это решается классом.
Попробуйте убрать из структуры поле string и сравнить при помощи "==". Получится?
Есть структура:
Если есть 2 её экземпляра, скажем так, signal1 и signal2 их кроме как поэлементно я так понимаю сравнить нет возможности?
Вот так не выходит:
Присвоить одну структуру другой тоже нельзя, вот так:
Какие тогда есть варианты вообще? Я смотрю, что в мкл структуру какие-то странные. Функционала нет. Назначение их как я вижу лишь название общее у группы переменные т.е. объединение по свойству и передача куда-нить. Хотя, по сути, всё это решается классом.
Нормальные структуры в MQL. Правильные.
Поэлементно и сравнивай.
В общем случае структуры нельзя сравнивать через "простое равно", как минимум, в них могут быть строки. А возможен и более хитрый случай - в структуре может быть указатель на объект. Будешь сравнивать две таких структуры, в которых указатели на одинаковые объекты - и получишь ошибку. При "общем" сравнении - ты получишь, что структуры разные (указатели-то в них разные). А реально - это будут одинаковые структуры, поскольку указатели будут указывать на одинаковые объекты.
Через "простое равенство" просто визуально удобно записывать сравнение структур, но для общего случая методика простого сравнения не годится. А для классов - вобще следует перегружать оператор сравнения, чтобы написанное простое сравнение "раскрывалось" в функцию сравнения, которая учитывает структуру класса.Попробуйте убрать из структуры поле string и сравнить при помощи "==". Получится?
Нет. Я скрипт простой накидал. Даже так не сравнивается:
struct struct1 { int i; double d; bool b; }; struct struct2 { int i; double d; bool b; }; void OnStart() { //--- struct1 str1; struct2 str2; ZeroMemory(str1); ZeroMemory(str2); str1.i = 5; Print("str1.i = ", str1.i); Print("str2.i = ", str2.i); Print("str2 == str1 ? ", str2 == str1); // str2 = str1; Print("str1.i = ", str1.i); Print("str2.i = ", str2.i); //Print("str2 == str1 ? ", str2 == str1); }
Через "простое равенство" просто визуально удобно записывать сравнение структур, но для общего случая методика простого сравнения не годится. А для классов - вобще следует перегружать оператор сравнения, чтобы написанное простое сравнение "раскрывалось" в функцию сравнения, которая учитывает структуру класса.
Ну так понятно, что обычно не так. Я всегда сравниваю (не в мкл есс-но) экземпляры с помощью equals. Здесь такого нет, поэтому и .. попробывал обычным сравнением.
Структура это по сути классы, то есть в них можно добавлять методы, переопределять операторы. Для вашей задачи необходимо переопределить операторы присваивания и сравнения.
struct LastExecutedSignal { string symbol; ENUM_ORDER_TYPE type; ulong magic; datetime time; double price; double unrealizedLot; bool isRealized; void operator=(LastExecutedSignal &signal); bool operator==(LastExecutedSignal &signal); }; bool LastExecutedSignal::operator==(LastExecutedSignal &signal) { if(symbol!=signal.symbol)return(false); if(type!=signal.type)return(false); if(magic!=signal.magic)return(false); if(time!=signal.time)return(false); if(price!=signal.price)return(false); if(unrealizedLot!=signal.unrealizedLot)return(false); if(isRealized!=signal.isRealized)return(false); //--- return(true); } void LastExecutedSignal::operator=(LastExecutedSignal &signal) { symbol=signal.symbol; type=signal.type; magic=signal.magic; time=signal.time; price=signal.price; unrealizedLot=signal.unrealizedLot; isRealized=signal.isRealized; }
Структура это по сути классы, то есть в них можно добавлять методы, переопределять операторы. Для вашей задачи необходимо переопределить операторы присваивания и сравнения.
Интересная реализация. Благодарю за наводку!
Интересная реализация. Благодарю за наводку!
Только так вы и сможете выполнять данные действия со структурой.
signal1 == signal2 signal1 != signal2
Ну так понятно, что обычно не так. Я всегда сравниваю (не в мкл есс-но) экземпляры с помощью equals. Здесь такого нет, поэтому и .. попробывал обычным сравнением.
Хм... А что такое equals ? В С++ такого тоже нет.
Сравнивать необходимо поэлементно, а в объектах - должна быть специальная функция сравнения.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть структура:
Если есть 2 её экземпляра, скажем так, signal1 и signal2 их кроме как поэлементно я так понимаю сравнить нет возможности?
Вот так не выходит:
Присвоить одну структуру другой тоже нельзя, вот так:
Какие тогда есть варианты вообще? Я смотрю, что в мкл структуру какие-то странные. Функционала нет. Назначение их как я вижу лишь название общее у группы переменные т.е. объединение по свойству и передача куда-нить. Хотя, по сути, всё это решается классом.