Errores, fallos, preguntas - página 2092

 
Renat Fatkhullin:

build 1711, el mismo error se observó en 1709 y 1700, no lo he notado antes:

- si solicito la hora de apertura del bar que no está en el historial, entonces CopyTime se congela por tiempo desconocido, por ejemplo solicito la hora de apertura del bar:

CopyTime(_ticker, _tf, _start, _stop, _buff)
где:
_ticker == RTS-9.12
_tf == PERIOD_M1
_start == D'2017.09.20 19:01'
_stop == D'2017.09.20 19:00'
_buff == динамический массив типа datetime

pero como la sesión de la tarde se trasladó a las 19:05 y no hay barras en el historial para este intervalo de tiempo, entonces, después de llamar a la función, el control no se transfiere de nuevo al programa y éste se cuelga.

Aunque, la función debería salir con un error.

 

Error en la ejecución

typedef void (*fn)();
struct A {
        fn a;
};
struct B : A {
        void a() {}
};
void OnStart()
{
        B b;
        b.a(); //error: invalid function pointer call
}
typedef void (*fn)();
void g() {}
struct A {
        A() : a( g ) {}
        fn a;
};
struct B : A {
        void a() {}
};
void OnStart()
{
        B b;
        b.a(); //вместо B::a() вызывается g()
}
 

Error de compilación

typedef void (*fn)();
struct A {
        fn a;
};
struct B : A {
        void a( int ) {}
};
void OnStart()
{
        B b;
        b.a( 2 ); //error: '2' - wrong parameters count
}

 
No recuerdo el matiz de la variable estática. ¿Puedes recordarme por qué este bastardo hace esto?
class A
{
public:
  A()
  {
    A::f();
  }
  
  static void f()
  {
    static bool Tmp = true;
    
    Print(Tmp);
  }
};

void OnStart()
{
  static A a; // static - false, иначе - true;
}
 

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

Bichos, errores, preguntas

A100, 2017.12.19 23:04

Error al ejecutar

typedef void (*fn)();
struct A {
        fn a;
};
struct B : A {
        void a() {}
};
void OnStart()
{
        B b;
        b.a(); //error: invalid function pointer call
}
void g() {}
void OnStart()
{
        B b;
        b.a = g;
        b.a(); //вместо B::a() вызывается g()
}

Parece ser una razón comprensible en ambos casos: el campo y el método tienen el mismo nombre, por lo que la referencia al campo y al método son exactamente iguales. En consecuencia, el compilador llama al campo en lugar de al método. En el primer caso, el campo no está definido, por lo que es un fastidio. En el segundo caso, todo está bien - el campo se llama.

Así, si declaramos un método en la base y un campo con el mismo nombre en el descendiente, funcionará en una secuencia diferente.

El compilador debería dar la siguiente salida

declaration of 'a' hides member declaration at line 3
 
fxsaber:

En consecuencia, el compilador llama al campo, no al método.

¿Por qué un campo es mejor que un método? En C++, por ejemplo, se llama a un método en lugar de a un campo -esto es lógico- porque el método está en una clase derivada, por lo que está más cerca. En otras palabras, si la firma en la clase derivada se ajusta completamente, ¿por qué involucrarse en la clase base?

 
A100:

¿Por qué un campo es mejor que un método? Por ejemplo, C++ llama a un método en lugar de a un campo, lo cual es lógico porque el método está en una clase derivada, por lo que está más cerca. En otras palabras, si la firma en una clase derivada se ajusta completamente, ¿por qué involucrarse en la clase base?

Te das cuenta de que has creado una situación artificial, que siempre debería ir acompañada de una advertencia del compilador.

Sobre el tema "más cerca" escribí

fxsaber:

si declaras un método en la base y un campo con el mismo nombre en la descendiente, funcionará en una secuencia diferente.

 
fxsaber:
No recuerdo el matiz con las variables estáticas. Por favor, recuérdame por qué este bastardo genera esto.

Todo el problema es la secuencia de inicialización de las variables y la secuencia de ejecución del código.

Es más fácil de entender en el modo de depuración paso a paso que explicarlo con palabras.

 

Extraño error con los trabajos autónomos.

había 4 trabajos en curso. tomé 1 trabajo se convirtió en 5. pasó un trabajo dejó 5.

Tomé un trabajo más y dice 5. Tomé un trabajo más y dice 6. Tomé un trabajo más y dice 4 trabajos pero dice 6 trabajos en progreso.

tomó otro trabajo con 5 obras en curso 7

ahora no puedo aceptar trabajos aunque solo tengo 5

número de solicitud

1913868

 
Aleksei Beliakov:

Extraño error con los trabajos autónomos.

había 4 trabajos en curso. tomé 1 trabajo se convirtió en 5. pasó un trabajo dejó 5.

Tomé un trabajo más y dice 5. Tomé un trabajo más y dice 6. Tomé un trabajo más y dice 4 trabajos pero dice 6 trabajos en progreso.

tomó otra con 5 obras pero "en progreso" 7

ahora no puedo aceptar trabajos aunque solo tengo 5

número de solicitud

1913868

Gracias por el mensaje, estoy trabajando en una solución.

Razón de la queja: