Fehler, Irrtümer, Fragen - Seite 1513

 

Was ist besser, vom Standpunkt der Leistung, wie diese:

  template <typename T>
  void SetProperty( const int id, const T Value, const int Modifier = 0 ) const
  {
    const string sType = typename(T);

    if (sType == "double")
      ::ObjectSetDouble(this.Chart, this.Name, id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(this.Chart, this.Name, id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(this.Chart, this.Name, id, Modifier, (long)Value);

    return;
  }

oder durch Überladen von Methoden?

 
zaskok3:

Was ist besser, vom Standpunkt der Leistung, wie diese:

oder durch Überladen von Methoden?

Sie werden keinen Unterschied in Bezug auf die Leistung feststellen - beide Lösungen haben ihre Berechtigung :)
 
coderex:
Sie werden keinen Unterschied in Bezug auf die Leistung feststellen - beide Lösungen haben ihre Berechtigung :)

Ich danke Ihnen! Eine andere Frage:

Was ist der Sinn von const-Feldern in einer Struktur? Solche Strukturen können gar nicht übergeben werden (Compilerflüche oder Stack Overflows)?

#property strict 

struct STRUCT
{
  const int Num;
  
  STRUCT( const int iNum = 0 ) : Num(iNum) // Если затереть " = 0", то будет ошибка компиляции: 'STRUCT' - wrong parameters count 
  {
  }
  
/*
// Так получается обойти ошибки компиляции, но на этапе выполнения: Stack overflow   
  STRUCT operator = ( STRUCT &Struct )
  {
    STRUCT Res(Struct.Num);
    
    return(Res);
  }
*/
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct(Num);
  
  return(Struct); // 'return' - not allowed for objects with protected members or inheritance 
}

void OnStart( void )
{
  Print(GetStruct(1).Num);
  
  return;
}


DasÜberladen des Zuweisungsoperators für Strukturen ist eigentlich nicht möglich (es würde wegen der unendlichen Rekursion Sinn machen). Warum dann also Konst-Felder in einer Struktur?

 
Karputov Vladimir:

Unter Windows 10 x64 ist dieser Fehler beim Build 1241 nie aufgetreten. Nach dem Befehl "Ausklappen" wird das Grafikfenster vollständig und ohne Löcher ausgeklappt:

Wahrscheinlich haben Sie einige Einstellungen in Ihrem Betriebssystem geändert (vielleicht sind Sie damit beschäftigt, die Standardeinstellungen Ihres Betriebssystems zu ändern oder die Registrierung zu bereinigen oder ähnliches...).

Wenn Sie das Glas mit der Maus ziehen, drücken Sie an dieser Stelle entweder die "Umschalttaste" oder "Strg" oder "Alt".

Am besten schreibst du an serviceDesk mit einer detaillierten Beschreibung, mit eigenem Code (der Ticks anzeigt) und mit Screenshots.

>> Wahrscheinlich haben Sie einige Einstellungen in Ihrem Betriebssystem geändert (vielleicht sind Sie scharf darauf, Standardfunktionen Ihres Betriebssystems zu beschneiden, oder die Registrierung zu bereinigen, usw.).

>> Ich stehe nicht auf so etwas, die Systeme sind sauber

>> Hier kann ich Sie mit einer detaillierten Beschreibung, mit Ihrem Code (der Tics zeigt), mit Screenshots beraten, um eine Anwendung zu ServiceDesk zu machen.

und wo ist das? ich dachte, dieser Zweig sei ein Serwer

 

Wenn ich #include verwende, um eine mqh-Datei einzuschließen, die etwas Ähnliches im Indikator enthält:

int GetIndicatorBuffers( void )
{
  return(indicator_buffers); // 'indicator_buffers' - undeclared identifier
}

bei der Zusammenstellung des Indikators selbst keine Fehler auftreten. Es kommt jedoch auch bei mqh vor (siehe oben).

Wie kann ich den Wert dieser Eigenschaft Indikator in MT4 zu finden, so dass der Compiler nicht mehr als einmal in eingesteckt mqh beschweren wird?

 

Ich versuche sicherzustellen, dass die Anwendung in MQL5 und MQL4 identisch funktioniert.

Ich vermute, dass man bei der Einführung von Sinput-Variablen in MQL4 vergessen hat, die FunktionenParameterSetRange() undParameterGetRange() in die Sprache aufzunehmen.

Sie erscheinen in der MQL4-Dokumentation alsParameterSetRange() undParameterGetInput()-https://docs.mql4.com/basis/variables/inputvariables#sinput

aber der Compiler akzeptiert sie nicht.

Leider geht ohne diese Funktionen der ganze Spaß an Sinput-Variablen verloren.

Input Variables - MQL4 Documentation
Input Variables - MQL4 Documentation
  • docs.mql4.com
Input Variables - MQL4 Documentation - MQL4 Documentation
 
zaskok3:

Ich danke Ihnen! Eine andere Frage:

Was ist der Sinn von const-Feldern in einer Struktur? Solche Strukturen können gar nicht übergeben werden (Compilerflüche oder Stack Overflows)?


DasÜberladen des Zuweisungsoperators für Strukturen ist praktisch unmöglich (wäre aber wegen der unendlichen Rekursion sinnvoll). Warum dann also Konst-Felder in einer Struktur?

Viel Spaß!

#property strict

struct STRUCT
{
  const int Num;
  
  STRUCT( const int iNum  ) : Num( iNum )
  {
  }
  
  STRUCT( const STRUCT& Struct ) : Num( Struct.Num )
  {
  }
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct( Num );
  return Struct;
}
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print( GetStruct(1).Num );
}
//+------------------------------------------------------------------+
 
Koldun Zloy:

Viel Spaß!

Es ist schön, wenn man gleich zur Sache kommt, danke! Ich frage mich immer noch, warum ich das nicht selbst herausgefunden habe, bevor ich den Konstruktor überladen habe, sondern den Zuweisungsoperator benutzt habe. Die Lösung liegt doch auf der Hand!
 

Verschieben Sie den MT4-Terminalordner auf ein anderes Laufwerk. Zuvor hatte ich es mit dem portablen Schlüssel ausgeführt. Das habe ich auch dieses Mal getan.

Das Terminal hat sich sofort mit dem Server verbunden. Wenn ich in der Vergangenheit einen Terminalordner verschoben habe, wurden die Kennwörter nicht gespeichert - ich musste sie neu eingeben. Jetzt (Build 950) passiert das nicht mehr.

Ist das normal (und nur bei mir)?

 
zaskok3:

Unter dem Gesichtspunkt der Leistungsfähigkeit gibt es keine bessere Möglichkeit:

Überlastung natürlich.
Grund der Beschwerde: