template<typename T> void F(T)
{
class A
{
void f() { new A; } // 'A' - declaration without typevoid g() { A* a; } // 'A' - pointer to this function type is not supported yet
};
};
voidOnStart()
{
F(0);
}
class A
{
};
class B : protected A
{
};
voidOnStart()
{
A* a;
B* b= (B*)a; // conversion from 'B *' to 'A *' is not accessible because of inheritance access
}
aunque aquí la conversión es explícita. Todo funciona en C++.
C++ convierte este código en reinterpret_cast y MQL en dynamic_cast. Y por lo que tengo entendido, este es exactamente el caso cuando el compilador puede encontrar un error de dynamiccast durante la compilación.
reinterpret_cast es ilegítimo en este caso, por lo que el hecho de que este código compile en C++ no es un argumento.
C++ convierte este código en reinterpret_cast y MQL en dynamic_cast. Y por lo que tengo entendido, este es exactamente el caso cuando el compilador puede encontrar un error de dynamiccast durante la compilación.
Reinterpret_cast es ilegítimo en este caso, por lo que el hecho de que este código compile en C++ no es un argumento.
Espera, ¿por qué mezclas las cosas? ¿Qué tiene que ver el reparto dinámico? Las tareas del compilador no incluyen hacer de Sherlock Holmes y buscar algo en la lógica del programa. Sólo realiza una comprobación formal del cumplimiento de la norma del lenguaje, nada más. Y todo es correcto desde el punto de vista de la norma.
Si hubieras mirado bien mi ejemplo, habrías visto que el problema estaba relacionado con protected. Si lo cambias a public, todo está bien. El objeto en sí no se modifica por esto, es decir, el compilador MQL sólo tiene una restricción innecesaria, eso es todo.
Así que no especules y busques un significado secreto donde no lo hay, que no es más que un error trivial del compilador.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Error de compilación:
Aquí hay un par de errores más:
Y también hay algo que falla en la conversión del puntero.
El siguiente código no compila:
aunque aquí la conversión es explícita. Todo funciona en C++.
Y también hay algo de desorden en la introducción de los carteles.
Es cierto, el compilador está luchando.
Ve a leer sobre dynamic_cast, static_cast y reinterpret_cast y cuándo usarlos correctamente y cuándo no.
C++ convierte este código en reinterpret_cast y MQL en dynamic_cast. Y por lo que tengo entendido, este es exactamente el caso cuando el compilador puede encontrar un error de dynamiccast durante la compilación.
reinterpret_cast es ilegítimo en este caso, por lo que el hecho de que este código compile en C++ no es un argumento.
C++ convierte este código en reinterpret_cast y MQL en dynamic_cast. Y por lo que tengo entendido, este es exactamente el caso cuando el compilador puede encontrar un error de dynamiccast durante la compilación.
Reinterpret_cast es ilegítimo en este caso, por lo que el hecho de que este código compile en C++ no es un argumento.
Espera, ¿por qué mezclas las cosas? ¿Qué tiene que ver el reparto dinámico? Las tareas del compilador no incluyen hacer de Sherlock Holmes y buscar algo en la lógica del programa. Sólo realiza una comprobación formal del cumplimiento de la norma del lenguaje, nada más. Y todo es correcto desde el punto de vista de la norma.
Si hubieras mirado bien mi ejemplo, habrías visto que el problema estaba relacionado con protected. Si lo cambias a public, todo está bien. El objeto en sí no se modifica por esto, es decir, el compilador MQL sólo tiene una restricción innecesaria, eso es todo.
Así que no especules y busques un significado secreto donde no lo hay, que no es más que un error trivial del compilador.