Fehler, Irrtümer, Fragen - Seite 1034
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Es macht sogar Sinn, denn das Geschriebene sieht ein wenig wahnhaft aus.
C++ sieht das nicht so.
Ja, in C++ werden viele Dinge nicht gezählt, aber der Punkt ist, dass die Initialisierung statischer Mitglieder wahrscheinlich nicht in der Reihenfolge erfolgt, in der sie initialisiert werden, sondern in der Reihenfolge, in der sie deklariert werden.
Ich werde die Norm zu diesem Thema lesen müssen.
https://www.mql5.com/ru/docs/basis/variables/initialization
Ich habe es mir zu einfach gemacht - ich habe die Konstante nicht verschoben - wie Sie jetzt sehen können, ist alles klar - eine Konstante wird durch eine andere initialisiert:
Der Compiler zeigt als Fehler an, dass das Mitglied s1 geschützt ist. Wenn wir protected durch public ersetzen, funktioniert alles wie am Schnürchen. Dass sie geschützt sind, hat jedoch nichts mit der Reihenfolge der Initialisierung oder der Zuweisung zu tun und auch nicht mit der Möglichkeit der Initialisierung mit einem bestimmten Wert
Ich werde die Norm dazu lesen müssen.
Ich stimme zu, im Allgemeinen ist der Compiler nicht dasselbe wie der Compiler, und man muss es herausfinden.
Hier ein weiteres Beispiel
Der MQL-Compiler will hier das Array nicht mit dem Wert const int initialisieren (enum - passes)
Auch hier berufe ich mich auf die Tatsache, dass C++ es kopiert und korrekt initialisiert.
Wahrscheinlich ein Fehler in der Aufrufreihenfolge
In C++ ist die Reihenfolge der Auswertung der Operanden eines Ausdrucks UB. Warum verlassen Sie sich hier auf eine bestimmte Reihenfolge?
wurde als "Wort Hallo" ausgegeben ?
Dies geschieht in diesem Fall bei einem überladenen Operator für den Typ int, während für den Typ string alles normal ausgegeben wird.
Außerdem hat es nichts mit C++ zu tun. Angenommen, Sie schreiben in Ihrem Code
Und Sie lassen diese Funktionen in umgekehrter Reihenfolge oder überhaupt für verschiedene Arten von Argumenten ausführen - in beliebiger ReihenfolgeGrüße!
Helfen Sie mir, den "ungültigen Zeigerzugriff" zu beheben.
In OnInit() haben wir:
SymbolsCollection = new CSymbolsCollection(); SymbolsCollection.RefreshRealSymbols();
Die MethodeCSymbolsCollection::RefreshRealSymbols() hat einen AufrufCleanSymbolsArray(myRealSymbols);
Diese Methoden und Variablen werden in der Klasse als deklariert:
Das Problem ist, dassRefreshRealSymbols() normal ausgeführt wird, wenn es imCSymbolsCollection-Konstruktor aufgerufen wird.
Der Aufruf von SymbolsCollection.RefreshRealSymbols(); in OnInit(); führt jedoch dazu:
Der Fehler bezieht sich auf die Zeile CleanSymbolsArray(myRealSymbols); im Körper der Methode CSymbolsCollection::RefreshRealSymbols(), die Position ist direkt nach der öffnenden Klammer.
Irgendwelche Ideen?
...
Irgendwelche Ideen?