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

 
Alexey Navoykov:
Вы невнимательны

или вы. давайте сразу по делу

 
A100:

Я предлагал простейший вариант, который может быть реализован уже завтра (а не через 10 лет) и была бы внешняя схожесть с C++ (а иначе зачем вообще что-то менять). Тем более что если operator*() не стали и не будут делать (была об этом информация на форуме), непонятно почему operator->() вдруг реализовали бы (они одного порядка)

В таком виде он не нужен ни завтра ни через 10 лет. И внешняя схожесть не нужна, нужны возможности.

Чтоб хотя бы частично перенести STL из C++. А там дело не упирается только в operator->, там ещё много чего нужно.

operator-> был бы первым шагом на пути к умным указателям.


 

На самом деле с неявным кастом в том виде в котором он сейчас все не очень хорошо.

class A
{};

class B : public A
{};

void OnStart()
{
   A* ab = new B;
   A* aa = new A;
   
   B* bb = ab; // ok
   
   B* ba1 = dynamic_cast<B*>(aa);
   Print(ba1 ? "ba1 ok" : "ba1 bad cast"); // bad cast

   B* ba2 = aa; // здесь неконтролируемый вылет
   Print(ba2 ? "ba2 ok" : "ba2 bad cast");
}

Видно, что dynamic cast включен в неявный каст

НО

во-первых непонятно зачем он включен если в языке dynamic cast явно присутствует

во-вторых он включен очень плохо, потому что ошибку dynamic cast в случае функции можно контролировать (на выходе плохой указатель), а неявный каст нельзя! потому что он бросает неконтролируемое исключение

2018.11.23 20:31:47.348    test (AUDNZD,M5)    incorrect casting of pointers in 'test.mq5' (17,11)

толку от него такого ровно ноль.

надо или давать невалидный указатель, как функция, или исключить dynamic cast из неявного каста и давать ошибку компиляции.

 

Да, при наличии этой проблемы, работа с ООП плохо контролируема и ненадёжна.  Где-то поменял тип в одном месте программы, а потом рванёт неизвестно где.  В данных примерах ещё можно как-то выкрутиться с помощью костылей, т.к. тут простое присвоение указателей, и всё перед глазами.  А в общем случае, когда указатель передаётся в какую-то функцию и динамически кастится неизвестно к чему, то уже никак не проконтролируешь.

 
Alexey Navoykov:

Точка - это универсальный оператор в MQL.

Это как посмотреть. Можно сказать что универсальный: работает и с объектами и с указателями.

А можно сказать что . работает только с объектами, а с указателями работает лишь постольку поскольку указатель неявно приводится к объекту, т.е. в случае

class A {
public:
    void f() {}
} *a;

запись

    a.f();

эквивалентна не

    a->f();

a

    (*a).f();
 

есть такая структура

struct OrdersInfo
{
   int      ticket;
   string   symbol;
   int      type;
   double   volume;
   double   open_price;
   double   stop_loss;
   double   take_profit;
   string   comment;
   int      magic;
};

есть есть переменная OrdersInfo order, при попытке записать ее в файл 

bool WriteStr(OrdersInfo &order)
{
   int handle = FileOpen(m_file_name, FILE_WRITE | FILE_COMMON | FILE_BIN);
   if(handle != INVALID_HANDLE)
   {
      if(FileWriteStruct(handle, order) == 0) return false;
      
      FileClose(handle);
   }
   
   return true;
}

компилятор выдает: 'order' - structures containing objects are not allowed

в чем может быть проблема?


 
Andrii Djola:

есть такая структура

есть есть переменная OrdersInfo order, при попытке записать ее в файл 

компилятор выдает: 'order' - structures containing objects are not allowed

в чем может быть проблема?


Тут

https://www.mql5.com/ru/docs/files/filewritestruct

перечислены ограничения.

Документация по MQL5: Файловые операции / FileWriteStruct
Документация по MQL5: Файловые операции / FileWriteStruct
  • www.mql5.com
//|                                          Demo_FileWiteStruct.mq5 | //|                        Copyright 2013, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Структура для хранения данных свечи                              |...
 
спасибо
 

МТ4  на ВПС  трафик отрицательный, пошло скачивание истории счетчик пошёл увеличиваться ...


 
Когда заходишь на страницу продуктов любого автора, то никак не понять, какие продукты под нужную платформу (4 или 5). Возможно ли разделить продукты на этой странице по платформам?