Fehler, Irrtümer, Fragen - Seite 2092

 
Renat Fatkhullin:

Build 1711, der gleiche Fehler wurde bei 1709 und 1700 beobachtet, ich habe ihn vorher nicht bemerkt:

- Wenn ich die Eröffnungszeit einer Bar anfordere, die nicht in der Historie enthalten ist, dann bleibt CopyTime für eine unbekannte Zeit stehen:

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

aber da die Abendsitzung auf 19:05 Uhr verschoben wurde und für dieses Zeitintervall keine Balken in der Historie vorhanden sind, wird nach dem Aufruf der Funktion die Kontrolle über das Programm nicht zurückgegeben und es bleibt hängen.

Allerdings sollte die Funktion mit einem Fehler beendet werden.

 

Fehler bei der Ausführung

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

Kompilierungsfehler

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
}

 
Ich kann mich nicht an die Nuance der statischen Variable erinnern. Können Sie mir sagen, warum dieser Bastard das tut?
class A
{
public:
  A()
  {
    A::f();
  }
  
  static void f()
  {
    static bool Tmp = true;
    
    Print(Tmp);
  }
};

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

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

A100, 2017.12.19 23:04

Fehler beim Ausführen

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

In beiden Fällen scheint es einen verständlichen Grund zu geben - Feld und Methode haben denselben Namen, so dass der Verweis auf Feld und Methode genau derselbe ist. Dementsprechend ruft der Compiler das Feld anstelle der Methode auf. Im ersten Fall ist das Feld nicht definiert, und das ist schade. Im zweiten Fall ist alles in Ordnung - das Feld wird aufgerufen.

Wenn wir also eine Methode in der Basis deklarieren und ein Feld mit demselben Namen im Nachkommen, wird es in einer anderen Reihenfolge funktionieren.

Der Compiler sollte die folgende Ausgabe liefern

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

Dementsprechend ruft der Compiler das Feld auf, nicht die Methode.

Warum ist ein Feld besser als eine Methode? In C++ zum Beispiel wird eine Methode und nicht ein Feld aufgerufen - das ist logisch, denn die Methode befindet sich in einer abgeleiteten Klasse, ist also näher. Mit anderen Worten: Wenn die Signatur in der abgeleiteten Klasse vollständig passt, warum sich mit der Basisklasse beschäftigen?

 
A100:

Warum ist ein Feld besser als eine Methode? In C++ wird beispielsweise eine Methode anstelle eines Feldes aufgerufen, was logisch ist, da sich die Methode in einer abgeleiteten Klasse befindet und somit näher liegt. Mit anderen Worten: Wenn die Signatur in einer abgeleiteten Klasse vollständig passt, warum sich mit der Basisklasse beschäftigen?

Ihnen ist klar, dass Sie eine künstliche Situation geschaffen haben, die immer von einer Warnung des Compilers begleitet sein sollte.

Zum Thema "näher" schrieb ich

fxsaber:

Wenn Sie eine Methode in der Basis deklarieren und ein Feld mit demselben Namen im Nachkommen, wird es in einer anderen Reihenfolge funktionieren.

 
fxsaber:
Ich kann mich nicht mehr an die Nuance mit statischen Variablen erinnern. Erinnern Sie mich bitte daran, warum dieser Bastard so etwas erzeugt?

Das ganze Problem ist die Reihenfolge der Variableninitialisierung und die Reihenfolge der Codeausführung.

Im Debug-Modus ist es einfacher, Schritt für Schritt zu verstehen, als es in Worten zu erklären.

 

Seltsamer Fehler bei freiberuflichen Jobs.

es waren 4 Stellen in Bearbeitung. ich habe 1 genommen, daraus wurden 5. bestanden, übrig blieben 5.

Ich habe einen weiteren Auftrag angenommen, und es werden 5 angezeigt. Ich habe einen weiteren Auftrag angenommen, und es werden 6 angezeigt. Ich habe einen weiteren Auftrag angenommen, und es werden 4 angezeigt, aber es wird angezeigt, dass 6 Aufträge in Bearbeitung sind.

eine weitere Stelle mit 5 laufenden Arbeiten angenommen 7

jetzt kann ich keine Jobs annehmen, obwohl ich nur 5 habe

Antragsnummer

1913868

 
Aleksei Beliakov:

Seltsamer Fehler bei freiberuflichen Jobs.

es waren 4 Stellen in Bearbeitung. ich habe 1 genommen, daraus wurden 5. bestanden, übrig blieben 5.

Ich habe einen weiteren Auftrag angenommen, und es werden 5 angezeigt. Ich habe einen weiteren Auftrag angenommen, und es werden 6 angezeigt. Ich habe einen weiteren Auftrag angenommen, und es werden 4 angezeigt, aber es wird angezeigt, dass 6 Aufträge in Bearbeitung sind.

nahm eine andere Stelle mit 5 laufenden Arbeiten an 7

jetzt kann ich keine Jobs annehmen, obwohl ich nur 5 habe

Antragsnummer

1913868

Danke für die Nachricht, wir arbeiten an einer Lösung.