Fehler, Irrtümer, Fragen - Seite 2473

 
Sergey Dzyublik:


Derzeit ist es nicht möglich, eine statische Variable zu verwenden, die innerhalb einer Template-Klasse deklariert wurde.
Könnte diese Einschränkung durch die Einführung eines Namensraums umgangen werden?

Ja, das können Sie.

Der Code wird etwas anders sein, korrekter, hier ist ein Beispiel:

//+------------------------------------------------------------------+
//|                                                  ScopeSample.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template<typename T>
class A
  {
public:
   struct Item
     {
      T                 value;
      
      Item(T initial=10):value(initial) { Print(__FUNCSIG__); }
     };

   static Item       s_default;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template<typename T>
class B
  {
public:
   struct Item
     {
      T                 value;
      
      Item(T initial=100):value(initial) { Print(__FUNCSIG__); }
     };

   static Item       s_default;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template<typename T>
A::Item A::s_default;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template<typename T>
B::Item B::s_default;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(A<int>::s_default.value);
   Print(B<int>::s_default.value);
  }
//+------------------------------------------------------------------+


Ergebnis:

2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) A<int>::Item::Item(int)
2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) B<int>::Item::Item(int)
2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) 10
2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) 100
 
Sehr cool, vielen Dank.
Ist es möglich, Alpha-Zugang zu MT mit Namespace-Unterstützung zu erhalten?
Im Rahmen einer Studie muss ich wirklich in der Lage sein, einen "intelligenten Container" zu schreiben, nicht um nach Fehlern/Schwachstellen usw. zu suchen.
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

Sergey Dzyublik, 2019.05.23 13:52

Ich habe das letzte Mal mit meinem Broker gearbeitet und dabei etwa ein Dutzend Fehler und "Eigenheiten" in MT entdeckt.
Woher weiß man, ob es sich lohnt, auf die Reparatur zu warten oder nicht?
Bitte schlagen Sie nicht vor, jedes Mal, wenn ein neuer Build herauskommt, alles zu testen.

#(nicht behoben in MT5(build 2059))"Kompilierungsfehler bei der Übergabe eines (void*)(NULL) Parameters an eine Template-Funktion".
#(behoben in MT5(build 2059)) "Strategietester: 2 Durchläufe geplant, aber in der Praxis unendliche Anzahl von Durchläufen > 900pc aufgrund eines "OnInit critical error" Fehlers".
#(nicht behoben in MT5(build 2059))"Ungültiger Wert des Feldes array size im Standard-Zuweisungsoperator für Strukturen mit dynamischen Arrays".
#(nicht behoben in MT5(build 2059)) Der Compiler sieht den Standard-Klassenkopie-Konstruktor nicht, wenn ein Klassenobjekt als Wert aus einer Funktion zurückgegeben wird".
#(behoben in MT5(build 2059)) "Der Compiler erkennt den Typ-Cast "an sich" für Musterklassen und "komplexe" Strukturen nicht".
(nicht behoben in MT5(build 2059))"Bei der Arbeit mit typedef wird bei der Verwendung einer Template-Funktion mit expliziter Spezialisierung kein Code für diese Template-Funktion erzeugt.
(nicht behoben in MT5(build 2059))"Kompilierungsfehler bei der Wiederverwendung derselben Funktionssignatur innerhalb von typedef".
#
(nicht behoben in MT5(build 2059))"Ein großer Teil der Funktionen für die String-Verarbeitung funktioniert nicht mit NULL-Zeichen in einem String (zum Beispiel: ShortArrayToString, StringInit, StringFill)".
#(nicht behoben in MT5(build 2059)) Die Funktion StringSetLength funktioniert nur, um die Stringlänge zu "trimmen", nicht um sie zu erhöhen.
#(behoben in MT5(build 2057))"Strategy Tester: 750 "metatester64.exe" Prozesse laufen".
"Forum www.mql5.com, wenn eine Nachricht mit einem Bild bearbeitet wird, wird das vorherige Bild nicht durch das neue ersetzt".


Vorschläge:
# Erlaube dem Benutzer, die Codegenerierung/Löschung für den Standard-Zuweisungsoperator (Kopierkonstruktor) zu erzwingen.
"Erlaubt ArrayCopy das Kopieren von Klassen und "komplexen" Strukturen, ähnlich wie Strukturen tiefe Kopierfunktionen für jeden Objekttyp bieten".
"Bereitstellung von Funktionen für den Benutzer zum Lesen/Setzen von Kapazitätswerten bei der Arbeit mit dynamischen Arrays".

# Änderungen zur Verbesserung der Infografik des Signaldienstes"


 

Heute wird in meinem Terminal die Tick-Historie auf meinem realen Terminmarktkonto, Broker Otkritie, nicht hochgeladen.

Die Daten im Ticker ändern sich.

Es ist jetzt 24.05.2019 23:40

Das Terminal hat das letzte Häkchen für den 23.05.2019.


Dasselbe gilt für einige andere Instrumente, einschließlich derer, mit denen ich selbst gehandelt habe.

Auf einem zweiten Terminal (separate Einrichtung), auf einem anderen Konto desselben Brokers ist der Effekt derselbe.

 
Können Sie erkennen, ob ein Experte im Optimierungsmodus oder im Einzeltestmodus arbeitet?
 
MT5 (Build 2059)
Kompilierungsfehler bei der Übergabe eines (void*)(NULL)-Parameters an eine Template-Funktion:
class C{
public:
   template<typename T>
   static void func(T ){
      Print(__FUNCSIG__);
   }
};


void OnStart(){  
   void* c_ptr = new C();
   
   C::func((C*)NULL);     // Ok
   C::func(c_ptr);        // Ok
   C::func((void*)NULL);  // 'void' - illegal use of 'void' type
   
   delete c_ptr;
}
In (Build 2057) funktionierte alles, vielleicht ist bei der Korrektur etwas schiefgegangen:
und#"Kompilierungsfehler bei der Ausführung von type cast "itself" für Template-Klassen und "komplexe" Strukturen".
 
Vielleicht ist es in Analogie zu C++ sinnvoll, einen "vollwertigen" nullptr-Zeiger einzuführen?
 

Im Build 2056 funktionierte noch alles einwandfrei. Aber im Jahr 2059 hat es bereits einen Kompilierungsfehler:

void OnStart()
{
class A {};
//#define void  A //(*)
        const void *p1;
              void *p2 = (void *)p1; //Error: 'void' - class type expected
}

Und wenn wir void durch A (*) ersetzen, ist alles in Ordnung. Welchen Unterschied macht das?

Außerdem tritt auch in diesem Fall ein Kompilierungsfehler auf:

              void *p2 = (void *)p1; //Error: 'void' - class type expected
 

Beim Kompilieren im Befehl build 2059x32 abstrakter Fehler:

lässt sich aber nicht über die IDE reproduzieren - könnte ein Versehen sein

 
A100:

Wie wählt man zwischen der Verwendung von Vorlagen und void*?

Grund der Beschwerde: