Errores, fallos, preguntas - página 2327

 
Alexey Navoykov:

¿Por qué MQL no ha corregido el error de que una clase base se lance implícitamente a una clase derivada? ¡Ni siquiera una advertencia del compilador!

Debe ser por esta construcción correcta

class A {  };

class B : public A { };

A* a;

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

no se ha tenido en cuenta.

 
fxsaber:

Probablemente debido a este correcto diseño

no ha tenido en cuenta la suya.

Esta es exactamente la misma construcción incorrecta.
 
Alexey Navoykov:
Es exactamente la misma construcción incorrecta.

Si hay un objeto de clase derivada detrás de un puntero a una clase base, es una gran construcción.

 
fxsaber:

Si hay un objeto de clase derivada detrás del puntero a la clase base, este es un gran diseño.

Te sugiero que no discutas y que me creas que es un error.
 
Alexey Navoykov:
Le sugiero que no discuta, sino que me crea que es un error.

Este verbo es poco aplicable en un foro técnico. Probé con 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]

Ninguna de las opciones funcionó. Las razones no están claras.

 
Koldun Zloy:

Si los haces intercambiables, entonces ambos son innecesarios.

En C++, esto es posible:

Sugerí la variante más sencilla que podría implementarse mañana (no en 10 años) y que tendría un parecido externo con C++ (si no, para qué cambiar nada). Además, si operator*() no está ni se va a implementar (había información al respecto en el foro), no está claro por qué operator->() se implementaría de repente (son del mismo orden).

 
Alexey Navoykov:

¿Por qué MQL no ha corregido el error de que una clase base se lance implícitamente a una clase derivada? ¡Ni siquiera una advertencia del compilador!

¿Esperas un error de compilación? No debería haber ninguno, porque en este caso es dynamic_cast
 
TheXpert:
¿Esperas un error de compilación? No debería haber ninguno, porque en este caso es dynamic_cast
Ver arriba, fxsaber proporcionó el código C++.
 
Alexey Navoykov:
Ver arriba, fxsaber proporcionó el código C++.

compilado por

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:

compilado por

No estás prestando atención.