Fehler, Irrtümer, Fragen - Seite 2720

 
Wieder einmal gibt es ein Problem mit nutzlosen Warnungen beim Kompilieren von MT5-Code (Build 2380).
Bitte erwägen Sie, unnötige Compiler-Warnungen für den Entwickler zu deaktivieren:
declaration of 'm_range' hides member   
   in template 'NodeArray<NodeArray<TailArray<int>>>' specified with [T=NodeArray<TailArray<int>>]      
   see previous declaration of 'm_range'        
declaration of 'm_range' hides member
   in template 'NodeArray<NodeArray<NodeArray<TailArray<int>>>>' specified with [T=NodeArray<NodeArray<TailArray<int>>>]
   see previous declaration of 'm_range'

Quellcode, Multidimensional Array Prototype (C++ online:https://onlinegdb.com/Hk7QjyRdL):
#define  PRINT(x) ; Print(#x, ":", string(x))

template<typename T>
class TailArray{
protected:
   int m_index;
   T data[];
   
protected:
   TailArray(){}   
public:     
   TailArray(int size){
      ArrayResize(data, size);
      m_index = 0;
   };
   
   T value(){
      int index = m_index;
      m_index = 0;
      return data[index];
   }
   const T operator=(const T value){
      data[m_index] = (T)value;
      m_index = 0;
      return value;
   };
};

template<typename T>
class NodeArray : public T{
protected:
   int m_range;
   
protected:
   NodeArray(){}   
public:     
   NodeArray(const NodeArray &src){ this = src;}
   template<typename T_int> NodeArray(T_int count, T_int r1) : T(count * r1), m_range(r1){}
   template<typename T_int> NodeArray(T_int count, T_int r1, T_int r2) : T(count * r1, r2), m_range(r1){}
   template<typename T_int> NodeArray(T_int count, T_int r1, T_int r2, T_int r3) : T(count * r1, r2, r3), m_range(r1){}
   
   T* operator[](int index){
      this.m_index = this.m_index * this.m_range + index;
      return &this;
   }
};


#define  MultiArray(type, size) MultiArray##size(type)
#define  MultiArray2(type) NodeArray<NodeArray<TailArray<type>>>
#define  MultiArray3(type) NodeArray<NodeArray<NodeArray<TailArray<type>>>>


template<typename T>
class MultiArrayCreate{
public:
   static MultiArray(T, 2) Size(int range_1, int range_2){
      return (MultiArray(T, 2)(range_1, range_2, 1));
   }
   static MultiArray(T, 3) Size(int range_1, int range_2, int range_3){  
      return (MultiArray(T, 3)(range_1, range_2, range_3, 1));
   }
};


void OnStart(){
   MultiArray(int, 2) arr_2 = MultiArrayCreate<int>::Size(4, 4);
   MultiArray(int, 3) arr_3 = MultiArrayCreate<int>::Size(4, 4, 4);
   
   arr_2[0][0] = 2233;
   arr_3[3][3][3] = 4455;
   PRINT(arr_2[0][0].value());
   PRINT(arr_3[3][3][3].value());
}
 

Guten Tag zusammen!

Können Sie mir bitte sagen, wie ich ein Bild in die Beschreibung des Skripts im Entwurf und der anschließenden Veröffentlichung in CodeBase einfügen kann?

Ich habe nur, aus irgendeinem Grund, Video von Youtube einfügen..., aber kein Symbol , um ein Bild einzufügen! :(

Vielen Dank im Voraus! :)

 
gsl17:

Guten Tag zusammen!

Können Sie mir bitte sagen, wie ich ein Bild in die Beschreibung des Skripts im Entwurf und der anschließenden Veröffentlichung in CodeBase einfügen kann?

Ich habe nur, aus irgendeinem Grund, Video von Youtube einfügen..., aber kein Symbol , um ein Bild einzufügen! :(

Vielen Dank im Voraus! :)

Die Schaltfläche "Bild einfügen"Abbildung einer Schaltfläche steht dem Nutzer ab einer bestimmten Mindestbewertung zur Verfügung. Offensichtlich haben Sie nicht genügend Bewertungen, um mit der SchaltflächeAbbildung einer Schaltfläche zu arbeiten.

 
Vladimir Karputov:

Die Schaltfläche "Bild einfügen" steht dem Nutzer erst ab einer bestimmten Mindestbewertung zur Verfügung. Sie verfügen offensichtlich nicht über eine ausreichende Bewertung, um die Schaltfläche zu verwenden.

Danke für die Klarstellung.

Das ist schade...

P.S. Ja, in der Tat, das ist das erste Mal, dass ich ein Skript auf CodeBase einstelle.

 
Bild 2390 mt 5 profiler on history arbeitet mit echten Daten Nr.
 

Defekte in der Template-Funktion/Klassen-Cache-Operation:
(behoben durch MT5(build 2390)) ***(up) Undefiniertes Verhalten, Sie erstellen ein komplexes umhülltes Objekt mit internem Typ "C" mehrmals und es stellt sich heraus, dass es ein völlig anderer Datentyp ist, vielleicht "B", vielleicht "int", was immer Sie wollen...
(behoben durch MT5(build 2390)) * Kompilierfehler, Fehler bei der Übergabe eines Funktionszeigers als const ref Template-Argument.
(behoben durch MT5(build 2390)) * Kompilierfehler, B<int> Objekt kann nach dem B<void*> Klassenobjekt erstellt werden, aber ein Kompilierfehler tritt auf, wenn es vorher gemacht wird.


Defekte in der Funktion/Klasse der Vorlage:
(behoben durch MT5(build 2390)) **(up) Kompilierfehler, Fehler beim Versuch, auf eine interne Klasse für einen Template-Parameter einer Template-Funktion zuzugreifen.
(behoben durch MT5(build 2390)) **(up) Kompilierfehler, Fehler in Template-Funktion, übergebener Zeiger innerhalbexpliziter Typkonvertierung verhält sich wie eine Klasse, sonst wie ein Zeiger.
(nicht behoben durch MT5(build 2390)) *** Compile Error, die Hauptaussage der unangemessenen Ausgabewarnung ist "deprecated behavior, hidden method calling will be disabled in a future MQL compiler version". Die aktuelle Implementierung schießt mit einer Kanone auf einen Spatz.
(nicht behoben durch MT5(build 2390)) ** Der Fehler betrifft den Rückgabewert einer Template-Funktion, wenn der Rückgabewert eine interne Klasse innerhalb einer Template-Klasse ist, deren Parametertyp durch den Argumenttyp der Template-Funktion festgelegt ist.
(nicht behoben durch MT5(build 2390)) ** Kompilierfehler, Namespace- und Scope-Fehler im Template-Konstruktor beim Aufruf der Basisklasse, wenn der gleiche Klassenname in der Vererbung und der internen Klasse verwendet wird.
(nicht behoben durch MT5(build 2390)) * Kompilierfehler, Fehler beim Aufruf von Template-Funktionen mit expliziten Argumenttypen, wenn diese von einer überladenen Nicht-Template-Funktion aufgerufen werden.
(nicht behoben durch MT5(build 2390)) Kompilierfehler, Fehler bei der internen Klassendefinition - kein Verweis auf globalen Namespace bei der Definition einer Basisklasse.
(behoben durch MT5(build 2390)) ** Kompilierfehler, Fehler bei der Generierung von Template-Klassencode bei Verwendung einer internen Klasse.
(behoben durch MT5(build 2390)) ** Kompilierfehler, Fehler bei der Generierung von Template-Methoden/Klassen, der Prozess der automatischen Substitution von Template-Parametern geht über den Rahmen hinaus in den Hauptprogrammcode.
(behoben durch MT5(build 2390)) * Kompilierfehler, Fehler bei fehlender Generierung von Template-Klassen-Code, wenn Template-Klasse als Rückgabewert für Template-Methode fungiert.
(behoben durch MT5(build 2390)) * Kompilierfehler, Fehler, wenn eine interne Struktur an eine Template-Funktion übergeben wird, kann der empfangeneDatentyp nicht als Basisdatentyp für eine andere interne Struktur in der Template-Klasse verwendet werden.
(behoben durch MT5(build 2390)) * Compile Error, die Prüfung auf wiederverwendete Template-Typnamen wird nicht durchgeführt, wenn eine Template-Funktion innerhalb einer Template-Klasse deklariert wird, was zu unerwartetem Verhalten führt.
(behoben durch MT5(build 2390)) Kompilierfehler, mehrere Defekte im Zusammenhang mit der Rückgabe eines "an Ort und Stelle erstellten" Objekts, wenn die Vorlagenklasse/-struktur das Objekt ist.
(behoben durch MT5(build 2368)) *( Es ist kein Bug, sondern ein Feature) im Basisklassenkonstruktor ist es unmöglich, einen expliziten Typecast beim Casting eines Zeigers auf ein Objekt der Basisklasse in einen Zeiger auf die Elternklasse durchzuführen.
(nicht behoben durch MT5(build 2390)) (neu) Kompilierfehler bei Verwendung des Standard-Zugriffsmodifikators für Vererbung in Vorlagenklassen, wenn Vorlagenparameter als Basisklasse fungieren.
(nicht behoben durch MT5(build 2390)) * (neu) Kompilierfehler, wenn eine Zuweisungsanweisung über eine explizite Basisklassenreferenz aufgerufen wird. Das Problem tritt bei einer Vorlagenklasse auf, bei der der Vorlagenparameter als Basisklasse fungiert.


Defekte im Zusammenhang mit falscher Aufrufpriorität für überladene Funktionen in MQL vs. C++:
(behoben durch MT5(build 2390)) **(up) Kompilierfehler, wenn die erste der überladenen überladenen Template-Funktionen eine vollständig spezialisierte Template-Basisklasse und die zweite eine unspezialisierte Template-Basisklasse verwendet.
(nicht behoben durch MT5(build 2390)) ** Compile Error, ein Kompilierfehler tritt bei der Generierung von Code für eine Schablonenfunktion auf, obwohl es eine überladene Schablonenfunktion mit einer passenden Signatur für die übergebenen Parameter gibt.
(nicht behoben durch MT5(build 2390)) * Compile Error, "ambiguous call to overloaded function" wenn überladene Template-Funktionen mit unterschiedlicher Anzahl von Template-Parametern aufgerufen werden.
(behoben durch MT5(build 2390)) (korrigiert durch MT5(build 2390)) **(up) Kompilierfehler, Aufrufpriorität von überladenen Template-Funktionen hängt tatsächlich von einem Template-Parameter ab, der theoretisch keinen Einfluss auf das Ergebnis der Kompilierung haben sollte.
(behoben durch MT5(build 2390)) *** Kompilierfehler, wenn Klassen A <= B <= C <= D geerbt werden und zwei Überladefunktionen implementiert werden, z.B. eine von Parameter A* und eine von Parameter B*, dann führt die Übergabe eines C* oder D* Objekts in eine solche Funktion in MQL zu einem Kompilierfehler.
(behoben durch MT5(build 2390)) (Behoben in MT5(build 2390). ** Laufzeit, Inkonsistenz in den Prioritäten für Aufrufe von überladenen Template-Funktionen.
(Behoben von MT5(build 2390)) *** Runtime, bei der Auswahl einer geeigneten überladenen Funktion für ein Argument vom Typ Zeiger wird die Funktion mit der Typumwandlung in Zeiger auf die übergeordnete Klasse anstelle der Basisklasse vorrangig.
(nicht behoben durch MT5(build 2390)) *** (neu) Kompilierfehler, Prioritäten für den Aufruf überladener Vorlagenfunktionen.
(nicht behoben durch MT5(build 2390)) ** (neu) Kompilierfehler, implizite Typkonversation wird verwendet, wenn eine Funktion für ein Argument mit Datentyp Farbeaufgerufen wird, obwohl es eine passende signaturüberladene Vorlagenfunktion mit Datentyp Farbe gibt.
(nicht behoben durch MT5(build 2390)) * (neu) Kompilierfehler, trotz expliziter Spezialisierung beim Aufruf einer überladenen Template-Funktion wird die Template-Funktion standardmäßig trotzdem aufgerufen, was zu einem Stack-Überlauf führt...
(nicht behoben durch MT5(build 2390)) * (neu)Kompilierfehler, Kompilierfehler, wenn eine Funktion über ihren Zeiger aufgerufen wird, wenn ein Array von Zeigern auf eine Funktion verwendet wird.


Defekte im Zusammenhang mit MetaEditor:
(nicht behoben durch ME5(build 2390)) *** (neu) Debugger, Absturz des Haltepunkts in derstatischen Strukturmethode führt zum Aufhängen des MT-Terminals.
(nicht behoben in ME5(build 2390)) ** (neu) Kompilierung, die Beschreibung des Kompilierungsfehlers passt nicht in die 256-Zeichen-Grenze und wird abgeschnitten, so dass es unmöglich ist, zu verstehen, welcher Datentypfehler auftritt, weil der erforderliche Teil abgeschnitten wurde.
(nicht behoben in ME5(build 2390)) ** (neu) Debugger, StepInto (F11) und Haltepunkte setzen funktionieren nicht.
(nicht behoben in ME5(build 2390)) ** (neuer) Debuger, nachdem ein Haltepunkt ausgelöst wurde, wird derselbe Haltepunkt erneut ausgelöst, ohne dass Code ausgeführt wird, anstatt die Codeausführung durch Drücken von (F5) fortzusetzen.
(nicht behoben in ME5(build 2390)) *(neu) Kompilierung, falsche Funktionsschablonen-Parametersignatur in Fehlerbeschreibung und Parameterinfo.
(nicht behoben in ME5(build 2390)) * (neu) MetaEditor, die Funktion Ersetzen (Strl+H) funktioniert nicht für die enthaltene "In Auswahl" zusammen mit "Rückwärtsrichtung", wenn der notwendige Teil der Anwendung ausgewählt ist, nicht der gesamte Code.


Defekte im Zusammenhang mit langsamer Funktionsausführung, Code-Optimierung funktioniert:
(behoben durch MT5(build 2390)) **(up) Laufzeit, großer Overhead beim Hinzufügen von einem Element nach dem anderen in ein Array mit ArrayResize, obwohl Speicher dafür reserviert ist, z.B. für Strukturen bis zu 7 mal langsamer.


Vorschläge:
(neu) - Hinzufügen von ME suchen/ersetzen nach aktuellem Projekt, da es während des Refactorings nicht gut ist, jede einzelne Datei zu durchsuchen und nach Vorkommen zu suchen.
Referenz(neu) - in ME beim Kompilieren die leeren Spalten Datei, Zeile, Spalte mit den entsprechenden Informationen über die Quelldatei zu füllen, aus der Include gemacht wurde.
Link- über die Einführung von Intellisense-Unterstützung für Namespace-Funktionalität auf der Grundlage von Intellisense-Arbeit für statische Methoden in Klassen.
link- um die Möglichkeit zu schaffen, Literale und temporäre Variablen als const ref Funktionsargumente zu übergeben.
Link- beimVerschieben von Projektdateien in der Registerkarte Projekt, für verschobene Dateien, die geöffnet sind und sich in ME-Registerkarten befinden, um ihren Speicherortpfad automatisch zu aktualisieren.
link- zur Einführung der Funktionalität der Typdeklaration in MQL.
link- über die Möglichkeit, die Erzeugung von Standard-Kopierkonstruktoren und Zuweisungsoperatoren zu erzwingen.

 
Es ist schade, dass ME beim Kompilieren nicht die Pfade der einsteckbaren mqh anzeigt, sondern nur die Namen.
 
Bei der Anzeige der Handelshistorie im Modus "Orders und Deals" ist es nicht möglich, nach Spalten zu sortieren. Aus diesem Grund stehen einige der soeben getätigten Geschäfte nicht am Ende der Liste, sondern in der Mitte.
 
fxsaber:

Ein einfaches Beispiel. Sie möchten eine Reihe von MAUs mit bestimmten Zeiträumen haben.

Jedes MAP ist ein Objekt desselben Typs. Es ist klar, dass die MASK durch den Punkt eindeutig festgelegt ist. Daher ist es logisch, sie zu einer Konstante zu machen.


Andere Sprachen erstellen einfach ein Array von Zeigern. Bei MQL haben wir diese Freiheit nicht.

Das wäre unlogisch. Wenn du es nicht ändern willst, heißt das nicht, dass du es zu einer Konstante machen musst. Es reicht aus, die Variable privat zu machen.

Es wäre logisch, wenn Sie etwas davon hätten, aber Sie haben sich damit nur ein Problem geschaffen.
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.04.21
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Sergey Dzyublik:

Wissen Sie, wie der MQL-Optimierer und Compiler aufgebaut sind?
Wie können Sie so sicher sein, dass Konstantenfelder einfacher Typen nicht zu diesem Zweck verwendet werden?

Der Optimierer hat damit nichts zu tun.