Errores, fallos, preguntas - página 1615

 
Hola a todos. ¿Existe alguna forma de volver a entrar en una cuenta cuando se interrumpe la conexión con el servidor de MT5?
 

Error de compilación:

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
  }
 

Aquí hay un par de errores más:

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);
  }
 

Y también hay algo que falla en la conversión del puntero.

El siguiente código no compila:

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
  }

aunque aquí la conversión es explícita. Todo funciona en C++.

 
Alexey Navoykov:

Y también hay algo de desorden en la introducción de los carteles.

Así es, el compilador jura.
 
Комбинатор:
Es cierto, el compilador está luchando.
¿Qué es lo correcto? Abre C++ y comprueba cómo debería ser.
 
Alexey Navoykov:
Ve a leer sobre dynamic_cast, static_cast y reinterpret_cast y cuándo usarlos correctamente y cuándo no.
 
Комбинатор:
Ve a leer sobre dynamic_cast, static_cast y reinterpret_cast y cuándo usarlos correctamente y cuándo no.
Evitemos las inundaciones innecesarias y la filosofía, ¿de acuerdo? Estamos hablando de una construcción específica que debe compilar.
 
Alexey Navoykov:

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.