Fehler, Irrtümer, Fragen - Seite 2256

 
Nikolai Semko:

1881

Korrigiert seit der Version 1886.

Nikolai Semko:
. Und es gibt noch mehr. Ich bin mir da nicht sicher.
Vor einem Jahr schien es solche Probleme noch nicht zu geben.

Sie haben die Probleme einfach nicht gesehen.

Als wir die Funktionen iTime, iOpen, iHigh usw. hinzufügten, die eigentlich degenerierte Funktionen von CopyTime, CopyOpen, CopyHigh usw. sind, sahen wir, dass es Fälle gab, in denen die neuesten Daten noch nicht geladen worden waren und die Funktionen das Ergebnis zurückgaben. Im Falle von i-Functions hat sich dies als kritisch erwiesen.

Jetzt sollte alles korrekt und schnell funktionieren. Warten Sie auf den offiziellen Build.

 
Slava:

Seit dem Build 1886 behoben.

Sie haben nur die Probleme nicht gesehen.

Bei der Hinzufügung der Funktionen iTime, iOpen, iHigh usw., die eigentlich degenerierte Funktionen von CopyTime, CopyOpen, CopyHigh usw. sind, haben wir festgestellt, dass es Fälle gibt, in denen die neuesten Daten noch nicht geladen wurden und die Funktionen das Ergebnis zurückgeben. Im Falle von i-Functions erwies sich dies als kritisch.

Jetzt sollte alles korrekt und schnell funktionieren. Warten Sie auf die offizielle Version.

Verstanden, danke.
D.h. der aktuell verfügbare Build ist 1881? Oder habe ich etwas übersehen?
 
Nikolai Semko:
Verstanden, danke.
Die aktuell verfügbare Version ist also 1881? Oder habe ich etwas übersehen?
Aktuell verfügbares Baujahr 1881
 

Fehler bei der Ausführung:

class A {
public:
        template<typename T>
        A* A::f( T )
        {
                int size = ArraySize( i ) + 1;
                Print( __FUNCTION__, ":", size );
                if ( ArrayResize( i, size ) == -1 )
                        Print( __FUNCTION__, ":Error:", GetLastError());
                return &this;
        }
        template<typename T>
        A* A::operator+( T t ) { return  f( t ); }
        int i[];
};
void OnStart()
{
        A a;
        a + 0 + 0;
}

Ergebnis: Erwartet:

A::f<int>:1 A::f<int>:1
A::f<int>:753790661 A::f<int>:2
A::f<int>:Fehler:4007

Ansonsten:

void OnStart()
{
        A a;
        a.f( 0 ).f( 0 );
}

GUT. Was ist der Unterschied? Warum wurde die Array-Größe plötzlich auf 753790660 (statt auf eins) erhöht, und infolgedessen wurde der Speicher plötzlich knapp (4007)? MT5\1881\32

Außerdem... Wenn wir in der ersten Variante buchstäblich drei Zeichen löschen, ist das Ergebnis ebenfalls in Ordnung

 
A100:

Ausführungsfehler:
Warum wurde die Array-Größe plötzlich auf 753790660 (statt auf eins) erhöht, so dass plötzlich kein Speicher mehr vorhanden war (4007)? MT5\1881\32

MT5\1881\64
debuggen - alles in Ordnung.
release - Kompilierungsfehler "Interner Compilerfehler".

 

Kompilierungsfehler:

class A {
        int A::f() { return NULL; } //нормально
        A  *A::g() { return NULL; } //Error: object of 'A' cannot be returned, copy constructor 'A::A(const A &)' not found
};
MT5\1881\32
 
A100:

Warum sollten Sie innerhalb einer Klasse wie dieser {} schreiben (::)?

 

Kompilierungsfehler:

class A {
        int A::f();
        template <typename T>
        A*  A::g();
};
int A::f() { return NULL; } //нормально
template<typename T>
A*  A::g() { return NULL; } //Error: 'g' - function already defined and has different type
 
fxsaber:

Warum sollten Sie innerhalb einer Klasse wie dieser {} schreiben (::)?

Warum nicht?

class A {
        void A::f() {} //нормально
};
Es ist ungefähr so... Ich möchte es schreiben... Wenn ich will, tue ich es nicht.
 
A100:

Warum nicht?

Das ist kein Grund.

Es ist in etwa so... Ich möchte schreiben... Wenn ich will, tue ich es nicht.
Dies ist beim Lesen von Code sehr hilfreich und vermeidet in manchen Situationen Fehler.