Errores, fallos, preguntas - página 2808

 
Error en la ejecución
class A {};
class B : public A {
public:
template<typename T>
                void f( T )  { printf( "%d", 1 ); }
};
class C : public B {
public:
                void f( A* ) { printf( "%d", 2 ); }
};
void OnStart()
{
        C *c;
        B *b;
        c.f( b );
}

El resultado en MQL: 1

En C++: 2

Que yo recuerde el concepto original de MQL se cambió hace mucho tiempo y ahora, como en C++, se llama a la clase base sólo si no hay una función adecuada en una derivada. ¿O tal vez lo han cambiado todo de nuevo?

 
A100:

En MQL está bien:

pero C++ da un error en ambos casos

¿Qué podría ser un error en el segundo caso? A lo sumo hay una advertencia (pista) de que se declaró un puntero pero no se utilizó.

 
Por favor, resuelva el error observado en todas las nuevas versiones

2020.07.26 10:54:28.285 PKFDC0:30019 genetic pass (94, 1154) probado con error "OnInit returned non-zero code 1" en 0:00:00.110

2020.07.26 10:54:28.289 Tester archivo experto ....\MQL5\StochasticCCI.ex5 error de apertura [2]

no está ahí y no debería estarlo.

el error es un agente de red después de la actualización, antes de la actualización funcionaba bien, el optimizador no da errores en el Asesor Experto en versiones antiguas, el Asesor Experto no ha recompilado

la demolición completa y la reinstalación de Metatrader con la eliminación de todos los datos no tuvo ningún efecto



 
Boris Egorov:
Por favor, resuelva el error observado en todas las nuevas versiones

2020.07.26 10:54:28.285 PKFDC0:30019 genetic pass (94, 1154) probado con error "OnInit returned non-zero code 1" en 0:00:00.110

2020.07.26 10:54:28.289 Tester archivo experto ....\MQL5\StochasticCCI.ex5 error de apertura [2]

no está ahí y no debería estarlo.

el error es un agente de red después de la actualización, antes de la actualización funcionaba bien, en versiones antiguas el optimizador no da error en el Asesor Experto, el Asesor Experto no fue recompilado

la demolición completa y la reinstalación de Metatrader con la eliminación de todos los datos no tuvo ningún efecto



Muestre el código de su llamada al indicador, por favor.
 
Mihail Matkovskij:

¿Cuál podría ser el error en el segundo caso? A lo sumo hay una advertencia (hint) de que el puntero fue declarado pero no se utiliza.

Eso es porque no es

class B : public A {};
puede haber diferentes dialectos, por lo que vale la pena consultar a los desarrolladores en cualquier caso
 
MetaQuotes:
Muestre el código de su llamada al indicador, por favor.

Obsérvese el puesto, los asesores de la gente han dejado de trabajar !!!!!!! https://www.mql5.com/ru/forum/347385/page5#comment_17519416

Новая версия платформы MetaTrader 5 build 2560: Улучшения во встроенной системе обучения
Новая версия платформы MetaTrader 5 build 2560: Улучшения во встроенной системе обучения
  • 2020.07.26
  • www.mql5.com
В пятницу 24 июля 2020 года будет выпущена обновленная версия платформы MetaTrader 5...
 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

A100, 2020.07.26 01:02

Sólo tengo un error en MQL:

class A {};
class B : A {};
class C : B {
                void f1( A* ) {}    //(1)нормально
                void f2() { A *a; } //(2)нормально
};

pero C++ tiene un error en ambos casos


Por favor, explique por qué hay un problema con este código.

 
fxsaber:

Por favor, explique por qué hay un problema en este código.

¡No tengo ni idea! Desmonté este ejemplo... Cambio de struct a class -El shell de C++ genera un error:

error: 'clase A A::A' es inaccesible

Puede comprobarlo usted mismo.

 

resolución del contexto. el constructor es inaccesible a través del ancestro debido a la herencia privada.

Si se especifica explícitamente el contexto, todo se compila

                void f1( ::A* ) {}    //(1)нормально
                void f2() { ::A *a; } //(2)нормально

_____

no preguntes por qué es necesario un constructor - no tengo ni idea.

 
@A100, @TheXpert, Gracias.
Razón de la queja: