Ошибки, баги, вопросы - страница 1355

 
Ilyas:

В скором будущем, если в классе будет перегружен соответствующий оператор преобразования, то будет вызван он.

Мммм, вкуснота ) очень хорошая новость
 
Я, честно говоря, не увидел ничего плохого в этом приведении, учитывая что оно явное.  Почему тут должна была быть ошибка?  Если кто-то хочет получить численное значение дескриптора, то в этом нет никакой ошибки.
 
Ilyas:
Но приводить дескриптор к числу или наоборот, нет смысла и скорее всего это ошибка в коде. 
У меня есть фрагменты кода где указатели явно преобразуются к числам (для сопряжения со внешними системами запись\чтение, а также при анализе ошибок и отладке), если это будет запрещено то понизится гибкость и придется переделывать.
 
Ilyas:
Безусловно, с точки зрения "как это хранится в памяти", Вы правы.
Но приводить дескриптор к числу или наоборот, нет смысла и скорее всего это ошибка в коде.
В скором будущем, если в классе будет перегружен соответствующий оператор преобразования, то будет вызван он.
Здесь может быть предупреждение, но никак не ошибка.
 
Ilyas:
Безусловно, с точки зрения "как это хранится в памяти", Вы правы.
Но приводить дескриптор к числу или наоборот, нет смысла и скорее всего это ошибка в коде.
В скором будущем, если в классе будет перегружен соответствующий оператор преобразования, то будет вызван он.

Разумеется, это была моя ошибка по невнимательности, я об этом уже писал. У меня вообще 95% ошибок не системные, а по невнимательности )) Кстати, я тоже не вижу смысла приводить дескриптор к какому-либо числу. С указателями интереснее, там есть арифметика указателей, например, можно разобрать double на байты или еще сделать что-то нетривиальное. А дескриптор, это просто какой-то внутренний идентификатор, выданный runtime системой МТ4, делать с ним ничего нельзя.

Вот так эта ошибка возникла, нечего писать код по ночам ))

// order - это дескриптор экземпляра класса, создается вот так после открытия ордера, потом заносится в CList открытых ордеров.
// COrder* order = new COrder(ticket, symbol, cmd, volume, price, timeOpen, magic, stoploss, takeprofit, comment, expiration);

// так было неправильно, просто я перепутал order с тикетом, забыл, что это же экземпляр класса, уставший был ))
logBuf[logBufCount++] = double(order);

// так правильно
logBuf[logBufCount++] = (double)order.Ticket
 
A100:
 Дескритор это все равно конкретное число. То что это число не указывает на конкретный участок памяти не лишает его свойств числа.

Тогда и string - это набор конкретных чисел. И картинка - это тоже число и электрический импульс на микросхеме...

В общем учите электротехнику, коллега. 

 
Alexey Navoykov:
Я, честно говоря, не увидел ничего плохого в этом приведении, учитывая что оно явное.  Почему тут должна была быть ошибка?  ...

Потому что нарушается контроль типов, и управляемая среда, коей и является виртуальная машина MQL, такие вещи должна пресекать:

MQL != C++ 

 
Ilyas:
Безусловно, с точки зрения "как это хранится в памяти", Вы правы.
Но приводить дескриптор к числу или наоборот, нет смысла и скорее всего это ошибка в коде.
В скором будущем, если в классе будет перегружен соответствующий оператор преобразования, то будет вызван он.
Очень круто и главное идеологически правильно. Двумя руками за! 
 
Alexey Volchanskiy:

Кстати, я тоже не вижу смысла приводить дескриптор к какому-либо числу...

Есть такой смысл. Это очень полезное свойство для специфических контейнеров данных, например словарей, где дескриптор, по определению уникальный, может быть ключом к классу. В этом случае вычислять свой хеш будет не надо, и главное, можно будет различать уникальность объектов по ссылке и по значению (что является в общем-то разными понятиями). Плюс размещать в коллекции можно будет классы не связанные друг с другом узами наследования.
 
Alexey Volchanskiy:

А дескриптор, это просто какой-то внутренний идентификатор, выданный runtime системой МТ4, делать с ним ничего нельзя.

Другие делают. Открывайте новые горизонты.
Причина обращения: