Errores, fallos, preguntas - página 1172

 

Hay errores en la biblioteca estándar de MQL4, concretamente en las clases indicadoras.

En la clase CiATR falta el cuerpo del método GetData.

En los indicadores que utilizan parámetros del tipo ENUM_APPLIED_VOLUME(CiForce, CiOBV) se produce un error: no se puede utilizar un enumerador inadecuado

Por cierto, ENUM_APPLIED_VOLUME parece ser una enumeración estándar; está presente en la documentación de MQL4, pero de hecho está ausente ('ENUM_APPLIED_VOLUME' - identificador no declarado).

Así que, por favor, compruebe todas sus bibliotecas. Tengo la sensación de que fueron portados apresuradamente desde MT5 sin siquiera comprobar su funcionalidad.

 

Error de comp ilación, build 966

#property library
#define  CLR     C'255,255,255'//White

class A {
        A() { clr = CLR; }
        color clr;
};
la construcción 932 está bien
 
A100:
Tras la sustitución directa, el código no compila debido al comentario
 

depende del contenido del comentario

#define  CLR     C'255,255,255'//не White

está bien

 
Bueno, no debería compilar de todos modos )
 

Los comentarios nunca se sustituyen - el compilador simplemente los ignora, de lo contrario #define en la mayoría de los casos no podría ser utilizado con comentarios en absoluto //

#define  ONE 1 //один
#define  TWO 2 //два

int a = ONE + TWO;
приводит к int a = 1 + 2;
а не к int a = 1 //один + 2 //два;
En cualquier caso, sustituya // por /**/ en https://www.mql5.com/ru/forum/1111/page1190#comment_993854
#define  CLR     C'255,255,255'/*White*/

El resultado es el mismo: error de compilación.

 
Anteriormente, en la página de perfil de otra persona era posible cambiar al News Feed (de ese usuario) a través de un enlace. Ahora no veo dicho enlace, pero si añado /news al final de la URL, esta página se abre normalmente. ¿Es un error que el enlace haya desaparecido de la interfaz de usuario?
 
marketeer:
Por favor, explique la siguiente situación. Tengo un indicador multidivisa, cuyos valores no cambian dependiendo del gráfico al que esté unido - calcula los valores para los instrumentos especificados y no está relacionado con la ventana actual. Dibujo manualmente las líneas de soporte y resistencia en este indicador. Ahora el truco: si arrastro otra herramienta de la visión general del mercado a la ventana, el aspecto del indicador sigue siendo el mismo y las líneas desaparecen. Si abre el cuadro de diálogo de la Lista de Objetos, esos objetos siguen apareciendo allí. Los valores de los puntos finales (fechas y valores) siguen siendo los mismos (es decir, deben ser visibles en los mismos lugares) - es comprensible, no han sido cambiados. Sin embargo, las líneas no son visibles. Si a continuación arrastra la antigua herramienta que estaba allí en la ventana, las líneas vuelven a ser visibles. ¿Cuál es el problema?

Encontrado y corregido.

Gracias por contactar conmigo. Resulta ser un error genérico - siempre ha funcionado así antes

 

No se puede aplicar el operador abreviado !() - error de compilación

class A {
public:
        bool operator !() { return ( false ); }
};

bool f1( A* a ) { return ( f3( a ) ); }
bool f2( A* a ) { return ( !a ); }             //ошибка компиляции
bool f3( A* a ) { return ( a.operator!() ); }  //нормально
bool f4( A& a ) { return ( !a ); }

void OnStart()
{
        A *a = new A;
        Print( f1( a ));
        Print( f4( a ));
}

Si el compilador entiende (y lo hace) que f4( a ) significa que 'a' es un objeto y no un puntero/scriptor como un número)

también debería entender que !a' significa lo mismo para 'a' (objeto, no puntero/numérico)

En otras palabras, si

class A {
    void f() {}

void OnStart()
{
        A a1;
        A *a2 = new A;
        a1.f();
        a2.f();
}
a1.f() y a2.f() significan lo mismo, tanto si a1, como si a2 es un puntero o un objeto, ¿cómo es peor el operador !()?
 

Debo añadir que, por ejemplo, no hay ningún error de compilación con operator+(), ni tampoco lo hay si simplemente añadimos operator+(), que no se utiliza en absoluto, al primer ejemplo anterior

class A {
public:
        bool operator !() { return ( false ); }
        bool operator +() { return ( false ); }
};
pero en este caso se produce otra incertidumbre
class A {
public:
        bool operator !() { return ( true ); }
        bool operator +() { return ( true ); }
};

int g( A& a )  { return ( 10 ); }
int g( int )   { return ( 20 ); }

void OnStart()
{
        A *a = new A;
        Print( !a );            //здесь    считает                 'a' - числом ???
        Print( a.operator!() ); //здесь не считает (что правильно) 'a' - числом
        Print( g( a ) );        //здесь не считает (что правильно) 'a' - числом, хотя есть g( int ) и нет g( A* )
}