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

 
Alexey Navoykov:

Почему в MQL до сих пор не исправлен баг, что базовый класс неявно приводится к производному классу?  Даже предупреждения компилятора нет!

Наверное, из-за этой правильной конструкции

class A {  };

class B : public A { };

A* a;

B* b= a;  // Нет ошибки

не учли Вашу.

 
fxsaber:

Наверное, из-за этой правильной конструкции

не учли Вашу.

Это точно такая же неправильная конструкция.
 
Alexey Navoykov:
Это точно такая же неправильная конструкция.

Если за указателем на базовый класс стоит объект производного, то это замечательная конструкция.

 
fxsaber:

Если за указателем на базовый класс стоит объект производного, то это замечательная конструкция.

Предлагаю не спорить, а просто поверить мне, что это ошибка.
 
Alexey Navoykov:
Предлагаю не спорить, а просто поверить мне, что это ошибка.

Этот глагол слабо применим на техническом форуме. Попробовал C++

class A {  };

class B : public A { };

A* a = new B;

B* b= dynamic_cast<B*>(a); // cannot dynamic_cast ‘a’ (of type ‘class A*’) to type ‘class B*’ (source type is not polymorphic)
B* b1= a; // invalid conversion from ‘A*’ to ‘B*’ [-fpermissive]

Ни один из вариантов не прокатил. Причины не ясны.

 
Koldun Zloy:

Если сделать их взаимозаменяемыми, тогда они оба просто не нужны.

В C++ возможно такое:

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

 
Alexey Navoykov:

Почему в MQL до сих пор не исправлен баг, что базовый класс неявно приводится к производному классу?  Даже предупреждения компилятора нет!

вы ждете ошибки компиляции? так ее не должно быть, потому что в данном случае это dynamic_cast
 
TheXpert:
вы ждете ошибки компиляции? так ее не должно быть, потому что в данном случае это dynamic_cast
Cмотрите выше, fxsaber привёл C++ код.
 
Alexey Navoykov:
Cмотрите выше, fxsaber привёл C++ код.

компилится

class A 
{ 
public:
    virtual ~A() = default; 
};

class B : public A { };

int main(void)
{
    A* a = new B;
    B* b= dynamic_cast<B*>(a);
    return 0;
}
 
TheXpert:

компилится

Вы невнимательны
Причина обращения: