Пара вопросов по работе со структурами - страница 2

 
Georgiy Merts:

Хм... А что такое equals ? В С++ такого тоже нет.

Сравнивать необходимо поэлементно, а в объектах - должна быть специальная функция сравнения.

Да ладно.. экземпляр любого типа это и есть объект. А значит их нужно сравнивать как объекты. Вот в Java это делается посредством equals.

Object (Java Platform SE 7 )
  • docs.oracle.com
Method Detail getClass Returns the runtime class of this . The returned object is the object that is locked by methods of the represented class. The actual result type is where is the erasure of the static type of the expression on which is called. For example, no cast is required in this code fragment: The object that represents the runtime...
 
Vladimir Karputov:

Попробуйте убрать из структуры поле string и сравнить при помощи "==". Получится?

Можно не убирать, а просто сделать это поле последним в структуре. 

 
hoz:

Да ладно.. экземпляр любого типа это и есть объект. А значит их нужно сравнивать как объекты. Вот в Java это делается посредством equals.

тогда берите эту библиотеку, и будет вам Джава)

https://www.mql5.com/ru/code/13663

JSON Serialization and Deserialization (native MQL)
JSON Serialization and Deserialization (native MQL)
  • голосов: 38
  • 2015.08.18
  • ---
  • www.mql5.com
Сериализация и десериализация JSON-протокола. Портированный код со скоростной библиотеки С++. Практичный пример: авторизация на сайте и парсинг ответа Благодарности принимаются в виде примеров, кто как применяет MQL для работы с веб-ресурсами. Поделитесь своим опытом работы с JSON в MQL. В протокол добавлены функции Escape / Unescape...
 
Алексей Тарабанов:

Можно не убирать, а просто сделать это поле последним в структуре. 

Не получится таким образом сравнивать, так мы будем адреса сравнивать, переменная структуры хранит лишь адрес в памяти где лежат данные.
 
hoz:

Да ладно.. экземпляр любого типа это и есть объект. А значит их нужно сравнивать как объекты. Вот в Java это делается посредством equals.

Погоди... equals в Java - это метод наследника базового класса. Который следует еще и определить в наследниках !

Дык и в MQL CObject имеет метод Compare - переопредели и пользуйся !

 
Georgiy Merts:

Погоди... equals в Java - это метод наследника базового класса. Который следует еще и определить в наследниках !

Дык и в MQL CObject имеет метод Compare - переопредели и пользуйся !

Не обязательно. Если это объект, он сравнивается по ссылке, как помню. Уже несколько месяцев на Java не пишу. Пока что здесь..)

А если класс спецевический, то да.. нужно передпрелять

 
Viktar Dzemikhau:

...

Присвоить одну структуру другой тоже нельзя, вот так:

Какой билд у вас?  Вроде уже года полтора как любые объекты свободно присваиваются без проблем.  Хоть со стрингами, хоть с указателями внутри.

 
Alexey Navoykov:

Какой билд у вас?  Вроде уже года полтора как любые объекты свободно присваиваются без проблем.  Хоть со стрингами, хоть с указателями внутри.

Билд последний. Да не присваивалось ничего. Я переопределил операторы везде и теперь нет никаких вопрос по этому поводу. Костыль, конечно. Но, что есть то есть. Главное, что вопрос уже решён.
 
Viktar Dzemikhau:
Билд последний. Да не присваивалось ничего. Я переопределил операторы везде и теперь нет никаких вопрос по этому поводу. Костыль, конечно. Но, что есть то есть. Главное, что вопрос уже решён.

Только что специально проверил, ваша структура прекрасно присваивается.  Какую ошибку выдаёт вам компилятор?

 

Вот кстати новость о том, когда этот функционал был внедрён:  https://www.mql5.com/ru/forum/206431 - пункт 8.    Чуть больше года прошло.