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

 
Всем здравствуйте. Можно ли програмными способами сделать перелогинивание счета при обрыве связи с сервером в МТ5 ? 
 

Ошибка компиляции:

class A
{ 
};

template<typename T>  void func(T *const &a[])  { } 


void OnStart()
  {
    A *const a[] = { NULL };
    func(a);      //  'a' - cannot convert from const pointer to nonconst pointer
  }
 

Вот ещё пара ошибок:

template<typename T> void F(T)
{
  class A
  {
    void f()  { new A; }  // 'A' - declaration without type
        
    void g()  { A* a; }   // 'A' - pointer to this function type is not supported yet
  };
};


void OnStart()
  {
    F(0);
  }
 

И также что-то перемудрили с приведением указателей.

Следующий код не компилируется:

class A
{
};

class B : protected A
{
};

void OnStart()
  {
    A* a;
    B* b= (B*)a;  // conversion from 'B *' to 'A *' is not accessible because of inheritance access
  }

хотя приведение тут явное.   В С++ всё работает.

 
Alexey Navoykov:

И также что-то перемудрили с приведением указателей.

Все правильно компилятор ругается
 
Комбинатор:
Все правильно компилятор ругается
Что правильного то?   Открой С++ и проверь как должно быть.
 
Alexey Navoykov:
Иди почитай про dynamic_cast, static_cast и reinterpret_cast и про то когда их правильно использовать, а когда нет.
 
Комбинатор:
Иди почитай про dynamic_cast, static_cast и reinterpret_cast и про то когда их правильно использовать, а когда нет.
Давайте обойдёмся без лишнего флуда и философии, ок?    Речь идёт о конкретной конструкции, которая должна компилироваться.
 
Alexey Navoykov:

С++ преобразует этот код в reinterpret_cast, а MQL в dynamic_cast. И насколько я понимаю, это как раз тот случай когда компилятор может найти ошибку динамик каста во время компиляции.

reinterpret_cast в данном случае нелегитимен, поэтому то что этот код компилируется в С++ не аргумент.

 
Комбинатор:

С++ преобразует этот код в reinterpret_cast, а MQL в dynamic_cast. И насколько я понимаю, это как раз тот случай когда компилятор может найти ошибку динамик каста во время компиляции.

reinterpret_cast в данном случае нелегитимен, поэтому то что этот код компилируется в С++ не аргумент.

Погодите, зачем вы мешаете всё в кучу?  Причём здесь динамик каст?  В задачи компилятора не входят игры в Шерлока Холмса и что-то там искать в логике программы.  Он выполняет лишь формальную проверку соответствия стандарту языка, не более.  И с точки зрения стандарта у меня всё корректно.

Тем более что дело тут вообще не в cast.  Если бы вы внимательно посмотрели мой пример, то увидели бы, что проблема там связана с protected.  Если его заменить на public, то всё нормально. Сам объект от этого не меняется.  Т.е. в компиляторе MQL просто излишнее ограничение, вот и всё.

Так что не стоит строить домыслы и искать тайный смысл там, где его явно нет.  А есть лишь банальная ошибка компилятора.

Причина обращения: