Errores, fallos, preguntas - página 2735

 
Tengo una pregunta, ¿cómo puedo encontrar señales gratuitas ahora? Periódicamente los encuentro manualmente, pero la página de señales sólo muestra señales de pago. Filtrar por valor no me permite encontrarlos.
 
La recompilación de una biblioteca conectada al Asesor Experto seleccionado en el probador no la recoge en la siguiente ejecución. Tengo que seleccionar otro Asesor Experto en el probador, y luego cambiar al anterior. Sólo entonces el probador recoge la nueva biblioteca. Un error completamente obvio.
 
Stanislav Korotky:
La recompilación de la biblioteca conectada al Asesor Experto, que está seleccionada en el probador, no conduce a su recogida en el siguiente inicio. Tengo que seleccionar otro Asesor Experto en el probador, y luego cambiar al anterior. Sólo entonces el probador recoge la nueva biblioteca. Un error completamente obvio.

Es lo mismo en la versión estable...

 
Error de compilación de MT5 (build 2407) cuando la clase contiene un puntero a una clase envolvente que utiliza esta clase como campo.
C++ en línea: https://onlinegdb.com/SJN1shM58
template<typename T>
class wrapper{
public:
   T data;
};

class B{
public:
   wrapper<B>* ptr;             // undefined class 'B' cannot be used
};


void OnStart(){  
   B b;
   b.ptr = new wrapper<B>();
   printf("%p", b.ptr);
} 
 
Un error de compilación:
int i = f(); //Error: 'f' - undeclared identifier
void OnStart()
{
}
int f() { return 0; }

pero por lo demás:

void OnStart()
{
int i = f(); //нормально
}
int f() { return 0; }

bien. ¿Qué diferencia hay?

 
A100:
Es un error de compilación:

pero de esta manera:

así es como debes escribir tu primer ejemplo - con una descripción hacia adelante, por cierto una descripción hacia adelante para estructuras y clases también funciona

int f(int);
int i = f(5);
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int f(int v)
{
   return v * v;
}
//+------------------------------------------------------------------+

2020.05.10 17:23:27.704 tst1 (ETHUSD,M1) i = 25

A100:

Bien. ¿Cuál es la diferencia?

Creo que el compilador analiza el compilador de arriba a abajo y al final, OnStart() será analizado en último lugar
 
Igor Makanu:
Creo que el compilador analiza el compilador de arriba a abajo y OnStart() será analizado en último lugar

En este caso, no hay que pensar - las reglas deben ser generales: si una función puede aplicarse antes de la declaración, entonces puede, si no, entonces no. En consecuencia, ambos casos deben compilar o no

 
A100:

En este caso, no hay que pensar - las reglas deben ser generales: si una función puede aplicarse antes de la declaración, entonces puede, si no, entonces no. En consecuencia, ambos casos deben compilar o no.

por desgracia, esto se llama una característica del lenguaje, se puede escribir de esta manera

int f(int v)
{
   return v * v;
}
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int i = f(5);
 
Igor Makanu:

Ay, esto se llama peculiaridades del lenguaje, se puede escribir así.

Todas las peculiaridades se reflejan en la Documentación. No he visto este allí. De ahí la conclusión: que no es una característica, sino un defecto

 
A100:

En este caso, no hay que pensar - las reglas deben ser generales: si una función puede aplicarse antes de la declaración, entonces puede, si no, entonces no. En consecuencia, ambos casos deben compilar o no.

Este es el comportamiento normal de C de tales lenguajes.

Sin una declaración de función de avance, no se pueden utilizar. Una llamada desde OnStart realmente compila con retraso, en comparación con una llamada directa a nivel global.

En C++, se generará exactamente el mismo error.