Fehler, Irrtümer, Fragen - Seite 1981

 
A100:

Das ändert nicht wirklich etwas - Kompilierungsfehler (ich habe ein Tablet - Borland Compiler)

Hmm, also muss man sich die Sprachstandards ansehen und herausfinden, wessen Compiler Mist baut.
 
Alexey Navoykov:
Hmm, wir müssen uns also mit den Sprachstandards befassen und herausfinden, wessen Compiler hier Mist baut.
Die zweite Option ist ähnlich

#ifdef __BORLANDC__
class B;
class A {
        int g( B * );
        int i;
};
class B : public A {};
int A::g( B *b ) { return b->i; } //Error: E224
#endif

VS 2010 schlägt fehl, weil es private durch implizite Konvertierung von B* nach A* überwindet


#ifdef __BORLANDC__

class B;
class A {
        int g( B * );
        int i;
};
class B : public A {};
int A::g( B *b ) { return ((A *)b)->i; } //нормально

#endif

 
Alexey Navoykov:
Hmm, also müssen wir uns die Sprachstandards ansehen und herausfinden, wessen Compiler Mist baut.
gcc 7.2 kompiliert die neueste Version, geprüft hier
Compiler Explorer - C++
  • About the author
  • godbolt.org
These settings control how Compiler Explorer acts for you. They are not preserved as part of shared URLs, and are persisted locally using browser local storage.
 
Комбинатор:
gcc 7.2 kompiliert die neueste Version, geprüft hier

Das Ergebnis ist die folgende Tabelle

class B;
class A {                                       //MQL //BCC //VS2010 //gcc
        int f1( B *b ) { return       b .i;   } // -     -     +        +
        int f2( B *b ) { return       b .g(); } // +     -     +        +
        int f3( B *b ) { return ((A *)b).i;   } // +     +     +        +
        int f4( B *b ) { return ((A *)b).g(); } // +     +     +        +
        int f5()       { return       b .i;   } // -     -     +        +
        int f6()       { return       b .g(); } // +     -     +        +
        int f7()       { return ((A *)b).i;   } // +     +     +        +
        int f8()       { return ((A *)b).g(); } // +     +     +        +
//---
        int g() { return 0; }
        int i;
        B *b;
};
class B : public A {};

Und msdn sagt: Zugriffskontrolle hilft zu verhindern, dass Objekte für unbefugte Zwecke verwendet werden. Dieser Schutz geht verloren, wenn explizite Typkonvertierungen(Typumwandlungen) durchgeführt werden.
 

Hallo zusammen.

Können Sie mir sagen, ob es eine Möglichkeit gibt, das Indikatorfenster zu entfernen, das im Strategietester erscheint, wenn die Visualisierung aktiviert ist?

Sie wird von Wizarda in MT5 generiert.

Ich habe in der MQL5-Dokumentation gelesen, dass IndicatoRelease im Strategy Tester nicht funktioniert. (Ich habe versucht, diese Funktion in OnDeinit einzufügen, aber sie beschwert sich, dass ein Handle nicht deklariert ist. Ich erkläre es, es erzeugt andere Fehler).

Gibt es einen anderen Weg?

 
Ahmet Garyagdyyev:

Hallo zusammen.

Können Sie mir sagen, ob es eine Möglichkeit gibt, das Indikatorfenster zu entfernen, das im Strategietester erscheint, wenn die Visualisierung aktiviert ist?

Sie wird von Wizarda in MT5 generiert.

Ich habe in der MQL5-Dokumentation gelesen, dass IndicatoRelease im Strategy Tester nicht funktioniert. (Ich habe versucht, diese Funktion in OnDeinit einzufügen, aber sie beschwert sich, dass ein Handle nicht deklariert ist. Ich erkläre es, es erzeugt andere Fehler).

Gibt es einen anderen Weg?


Sie können die Vorlage mit allen Kennzeichen in eine beliebige, zuvor von Ihnen gespeicherte Vorlage ändern.

 
A100:

Das Ergebnis ist die folgende Tabelle

VS und gcc gelten seit langem als die Referenz* (oder zumindest als weitgehend weniger fehleranfällig) als Borland. Ich selbst verwende Borland seit vielen Jahren, aber aufgrund seiner anderen Vorteile.

PS. *Dies ist nicht meine persönliche Meinung; ich werde sie nicht diskutieren.

 

Kolleginnen und Kollegen, ist jemand auf Versuche gestoßen, eine STL-C++-Bibliothek zu implementieren (unter Berücksichtigung der Sprachfähigkeiten)? Vorzugsweise mit Codobase-Platzierung, Suche sagt nein, aber vrdug ... . Sicherlich nicht alle, aber einige grundlegende Dinge: ein paar normale Container über Templates, und dass auto_ptr (ich sicherlich schrieb meine eigenen, aber selbst schreiben solche Primitive ist dumm).
Ich verstehe nicht, warum std µl keine Vorlage ist und warum wir neue Namen für Methoden/Klassen analog zu STL erfinden mussten.

 

Ich habe einen Fehler gefunden, ich werde den kompilierten Text nicht komplett einfügen, sondern Teile aus dem Skript nehmen:

class Source : public CObject
{
public:
   upindex_t start, top, lstart, ltop;
};

CArrayObj sourcear;

do
{
   Source *new_src = new Source;
   new_src.start = last.start;
   new_src.top = last.top;
   new_src.lstart = prev_prev.start;
   new_src.ltop = prev_prev.top;
   if( ! sourcear.Add(new_src) )
      return;
}
while(...);

for(int i = 0;  i < sourcear.Total();  ++ i)
{
   Source cursrc = (Source*)sourcear.At(i);  //!!!!! Это не вызывает ошибки во время компиляции
}

D.h. Cast: CObject*--> Source* --> Source

Oder handelt es sich um eine Art knifflige MQL-Spezifikation?


ZS: und eine solche Schnur wird gegessen:

Source new_src = new Source;

Das ist Blödsinn. Kein Kopieren von Cons/Operatoren in der Sprache, ich habe sie nicht dereferenziert. Was ist denn hier los?

 
pavlick_:

Oder handelt es sich um eine knifflige MQL-Spezifikation?

class A {};

void OnStart()
{
  A a = new A;
}

Der Standard-Kopieroperator wird ausgelöst.