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

 

Господа разработчики, как вы смотрите на то, чтобы существенно повысить удобство языка, добавив в него property:   https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

А то постоянные танцы с сеттерами, геттерами и скобками очень напрягают.

 
Alexey Navoykov:

Господа разработчики, как вы смотрите на то, чтобы существенно повысить удобство языка, добавив в него property:   https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

А то постоянные танцы с сеттерами, геттерами и скобками очень напрягают.

Алексей, я за, но надо не сюда, а сделать голосование. Вот тут есть некоторые костыли, на MQL не пробовал http://rsdn.ru/article/vcpp/props.xml
Свойства в С++
  • rsdn.org
В этой статье автор рассматривает различные способы реализации свойств в стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++, тогда как другие годятся для применения в любой программе, написанной на языке C++.
 
Alexey Volchanskiy:
Алексей, я за, но надо не сюда, а сделать голосование. Вот тут есть некоторые костыли, на MQL не пробовал http://rsdn.ru/article/vcpp/props.xml

Что-то там проблема с кодировкой по вашей ссылке. У меня кракозябры сплошные выдаёт.   Но я понял, о чём речь, я когда-то уже читал про эти костыли.   В MQL оно не реализуемо на данный момент, т.к. не поддерживается перегрузка оператора приведения.  Да и не стоит оно того, слишком уж костыльно.    А вот штатная фича в VS очень удобна, особенно если обернуть в макрос. И никаких дополнительных ресурсов не потребляет.    Так вот и в MQL тоже давно пора вводить проперти.  А то как-то всё коряво выглядит без них.

 
Alexey Volchanskiy:

Разобрался, нашел баг в компиляторе MQL4. Вот такая ошибка по невнимательности убила 2 дня на поиск... Суть в следующем, приведу простейший код. Ошибки компиляции или варнинга не возникает, возникает ошибка выполнения.

    double ptest = double(test); // тут должна быть ошибка компиляции!!! 

Не нужно здесь никакой ошибки. Тут явное приведение типа. Было бы в VS так

  double ptest = (double)(int)(test);
что бы это принципиально изменило?
 
A100:
Не нужно здесь никакой ошибки. Тут явное приведение типа
Нельзя класс привести к значимому типу, даже явно. Однозначно ошибка.
 
Напомните плиз, как сортировать символы в окне обзоре рынка (МТ4, МТ5). У меня на одном терминале красиво отсортированы, на другом - полный бардак. Сортировал давно - как делал не помню. В документации по этому поводу - ничего, кроме перетаскивания символов по одному на новое место. Но я точно так не делал - это убиться можно весь список вручную сортировать. :-/
 
Vasiliy Sokolov:
Нельзя класс привести к значимому типу, даже явно. Однозначно ошибка.

Там не класс, а указатель, а указатель это число.

class A{};
void f()
{
        A *a;
        int i = int(a);
}

C++ компилирует без ошибок

Если запретить прямое явное преобразование в double, то в следующий раз у него вместо double будет int с тем же результатом и опять будет компилятор виноват. Нужно отличать свои ошибки от ошибок компилятора.

 
A100:

Там не класс, а указатель, а указатель это число - учите матчасть.

C++ компилирует без ошибок

Если запретить прямое явное преобразование в double, то в следующий раз у него вместо double будет int с тем же результатом и опять будет компилятор виноват. Нужно отличать свои ошибки от ошибок компилятора.

Нет там никакого указателя, ибо в MQL4/5 указателей не существует. Есть дескрипторы.

----------------------

Получил ответ из сервисдеска

Support Team 2015.08.24 09:44
Спасибо за сообщение, исправим.
Действительно, тут должна быть ошибка компиляции.


Support Team 2015.08.24 14:39

Статус: Открыта Закрыта
Спасибо за сообщение, исправлено. Теперь компилятор будут выдавать ошибку компиляции.
 
Alexey Volchanskiy:

Нет там никакого указателя, ибо в MQL4/5 указателей не существует. Есть дескрипторы.

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