Errori, bug, domande - pagina 2092

 
Renat Fatkhullin:

build 1711, lo stesso errore è stato osservato su 1709 e 1700, non l'ho notato prima:

- se richiedo l'orario di apertura del bar che non è nella cronologia, allora CopyTime si blocca per un tempo sconosciuto, per esempio richiedo l'orario di 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

ma poiché la sessione serale è stata spostata alle 19:05 e non ci sono barre nella cronologia per questo intervallo di tempo, allora, dopo aver chiamato la funzione, il controllo del programma non viene trasferito indietro e si blocca.

Anche se la funzione dovrebbe uscire con un errore.

 

Errore nell'esecuzione

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

Errore di compilazione

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
}

 
Non riesco a ricordare la sfumatura della variabile statica. Puoi ricordarmi perché questo bastardo fa questo?
class A
{
public:
  A()
  {
    A::f();
  }
  
  static void f()
  {
    static bool Tmp = true;
    
    Print(Tmp);
  }
};

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

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

A100, 2017.12.19 23:04

Errore durante l'esecuzione

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

Sembra essere una ragione comprensibile in entrambi i casi - campo e metodo hanno lo stesso nome, quindi il riferimento a campo e metodo sono esattamente gli stessi. Di conseguenza, il compilatore chiama il campo invece del metodo. Nel primo caso, il campo non è definito, quindi è una seccatura. Nel secondo caso, tutto va bene - il campo viene chiamato.

Quindi se dichiariamo un metodo nella base e un campo con lo stesso nome nel discendente, funzionerà in una sequenza diversa.

Il compilatore dovrebbe dare il seguente output

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

Di conseguenza, il compilatore chiama il campo, non il metodo.

In che modo un campo è meglio di un metodo? C++, per esempio, chiama un metodo piuttosto che un campo - questo è logico - perché il metodo è in una classe derivata, quindi è più vicino. In altre parole, se la firma nella classe derivata si adatta completamente, perché farsi coinvolgere nella classe base?

 
A100:

In che modo un campo è meglio di un metodo? Per esempio il C++ chiama un metodo invece di un campo, il che è logico perché il metodo è in una classe derivata, quindi è più vicino. In altre parole, se la firma in una classe derivata si adatta completamente, perché essere coinvolti nella classe base?

Vi rendete conto che avete creato una situazione artificiale, che dovrebbe essere sempre accompagnata da un avvertimento del compilatore.

A proposito di "più vicino" ho scritto

fxsaber:

se dichiarate un metodo nella base e un campo con lo stesso nome nel discendente, funzionerà in una sequenza diversa.

 
fxsaber:
Non riesco a ricordare la sfumatura con le variabili statiche. Per favore, ricordami perché questo bastardo genera questo?

L'intero problema è la sequenza di inizializzazione delle variabili e la sequenza di esecuzione del codice.

È più facile da capire in modalità debug passo dopo passo che da spiegare a parole.

 

Strano bug con i lavori freelance.

c'erano 4 lavori in corso. ho preso 1 è diventato 5. passato uno ha lasciato 5.

Ho preso un altro lavoro e dice 5. Ho preso un altro lavoro e dice 6. Ho preso un altro lavoro e dice 4 lavori ma dice 6 lavori in corso.

ha preso un altro lavoro con 5 lavori in corso 7

ora non posso accettare lavori anche se ne ho solo 5

numero di applicazione

1913868

 
Aleksei Beliakov:

Strano bug con i lavori freelance.

c'erano 4 lavori in corso. ho preso 1 lavoro sono diventati 5. passato un lavoro sono rimasti 5.

Ho preso un altro lavoro e dice 5. Ho preso un altro lavoro e dice 6. Ho preso un altro lavoro e dice 4 lavori ma dice 6 lavori in corso.

preso un altro con 5 opere ma "in corso" 7

ora non posso accettare lavori anche se ne ho solo 5

numero di applicazione

1913868

Grazie per il messaggio, sto lavorando a una correzione.

Motivazione: