Fehler, Irrtümer, Fragen - Seite 1499

 
Alexey Kozitsyn:
Der Weg zur Programmierhölle ist mitglobalenVariablen gepflastert" (Steve McConnell)
Es wird nur ein Beispiel für das Nichtvorhandensein dieser Warnung gezeigt. Die Erstellung einer Variablen als globale oder lokale Variable ist eine Frage des Geschmacks und der Erfahrung des Programmierers.
 
Ilyas:
Eine Warnung über die Nichtverwendung von lokalen und globalen Variablen (einfacher Typ oder "komplex" ohne Konstruktoren) wird hinzugefügt, aber die Priorität dieser Aufgabe ist gering.
Verstanden, danke. Vorsichtshalber werde ich hier versuchen, die Entwickler darauf aufmerksam zu machen.
 
Alexey Kozitsyn:
Eine Aktivierung pro PC. Es spielt keine Rolle, wie viele Terminals es gibt.
Gibt es irgendwo eine Bestätigung?
 
Vladimir Pastushak:
Gibt es irgendwo eine Bestätigung?

Der Käufer erwirbt das Recht, das Produkt so oft zu aktivieren, wie vom Verkäufer zum Zeitpunkt des Kaufs oder der Miete des Produkts angegeben. Wenn zum Beispiel zum Zeitpunkt des Kaufs 20 Aktivierungen für das Produkt erlaubt sind, kann der Käufer es auf 20 verschiedenen Hardwarekonfigurationen installieren, auch wenn der Verkäufer diese Anzahl später reduziert.

https://www.mql5.com/ru/market/rules

Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
  • www.mql5.com
Общие положения и правила пользования сервисом Market
 
Dieser Beitrag reduziert automatisch die Auflösung des Bildes um das 6-fache der Größe (Bytes) des Originals. Warum?
 
Alexey Kozitsyn:
Slawa, guten Tag, können Sie sich zu der Bibliothek (Frage oben) äußern?

Das ist der richtige Weg, um das Problem zu lösen.

long CChart::Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe)
  {
   m_chart_id=ChartOpen(symbol_name,timeframe);
   if(m_chart_id==0)
      m_chart_id=-1;
   return(m_chart_id);
  }
 
Slawa:

Das ist der Weg zur Lösung

Ja, danke, das ist optimal. Für die Bibliothek. Was ist mit Fehler 4024?
 
Slawa:

Das ist der richtige Weg, um das Problem zu lösen.

Was ist der Sinn dieser Maßnahme? Die Standardbibliothek darf nicht nach Belieben verwendet werden, sondern muss sich streng an die Ideologie ihrer Struktur halten.Alexey Kozitsyn verwendet es falsch und hat deshalb eine Menge Fehler in der Ausgabe. Nachdem Sie das CCart-Objekt erstellt haben, müssen Sie nur noch das Diagramm mit der Attach-Methode an das Objekt der Klasse anhängen. Diese Methode ist überladen und kann sowohl das aktuelle Diagramm als auch das benötigte Diagramm anhängen. Durch die Änderung der Open-Methode wird die Möglichkeit, mit dem aktuellen Diagramm zu arbeiten, aufgehoben.

Und die Bitte an die Entwickler der Standardbibliothek - bitte machen Sie eine Beschreibung der Struktur der Bibliothek. Viele verstehen es nicht und fangen an, Fehler zu machen, und du gehst mit ihnen und fängst an, alles zu zerstören, was gemacht wurde.

 
Alexey Kozitsyn:

Frage zur MT4-Standardbibliothek.

Chart.mqh Datei

Ich möchte eine Tabelle öffnen. Ich verwende die Methode Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe).

1. Wenn Sie ein nicht verfügbares Symbol verwenden, gibt die Funktion ChartOpen() den Fehler #4024 - interner Fehler zurück. Zweifellos kann es sich um einen internen Fehler handeln, aber es gibt einen viel genaueren Fehlercode - #4106 - ein unbekanntes Symbol. Vielleicht sollten wir den zurückgegebenen Fehlercode ändern? Denn 4024 sagt dem Entwickler nichts darüber, wo der Fehler zu suchen ist.

2. Im Falle eines Fehlers weist ChartOpen() dem Feld m_chart_id den Wert 0 zu, d.h. es stellt sich heraus, dass wir mit dem aktuellen Diagramm arbeiten, was aber nicht korrekt ist, da wir das für die Arbeit benötigte Diagramm nicht geöffnet haben. Wenn wir also die Methode Detach() nicht aufrufen, wird das aktuelle Diagramm nach der Arbeit einfach geschlossen. Ich denke auch, dass dies nicht der richtige Ansatz ist. Die Funktion ChartOpen() sollte im Falle eines Fehlers besser -1 zurückgeben.

Bevor man mit einem Diagramm arbeitet, muss es mit der Attach-Methode an ein Klassenobjekt angehängt werden!!! Wenn Sie nicht mit dem aktuellen Diagramm ( 0 ) arbeiten wollen, implementieren Sie diese Prüfung und verbieten Sie die Verwendung des aktuellen Diagramms in Ihrer Arbeit.

Und was bedeutet es, mit dem Diagramm zu arbeiten und es nicht mit der Detach-Methode zu schließen, um es zu verlassen? Ist es wirklich schwierig, eine Zeile in den Destruktor Ihrer Klassen oder in OnDeinit zu schreiben? Die Arbeit mit Objekten muss streng kontrolliert werden, dann kann man Fehler vermeiden.

 
coderex:

Was ist der Sinn dieser Maßnahme? Die Standardbibliothek sollte nicht nach den Wünschen des Benutzers, sondern in strikter Übereinstimmung mit der Ideologie ihrer Struktur verwendet werden.Alexey Kozitsyn benutzt es nicht richtig, und deshalb hat er eine Menge Fehler in der Ausgabe. Nachdem Sie das CCart-Objekt erstellt haben, müssen Sie nur noch das Diagramm mit der Attach-Methode an das Objekt der Klasse anhängen. Diese Methode ist überladen und kann sowohl das aktuelle Diagramm als auch das benötigte Diagramm anhängen. Durch die Änderung der Open-Methode wird die Möglichkeit, mit dem aktuellen Diagramm zu arbeiten, aufgehoben.

Und die Bitte an die Entwickler der Standardbibliothek - bitte machen Sie eine Beschreibung der Struktur der Bibliothek. Viele Menschen verstehen das nicht und beginnen, Fehler zu machen, und du folgst ihrem Beispiel und fängst an, alles kaputt zu machen, was du gemacht hast.

Ich habe oben deutlich geschrieben, was der Sinn einer solchen Maßnahme ist. Wenn beim Öffnen des Diagramms ein Fehler auftritt (z.B. wenn Sie ein ungültiges Symbol setzen), dann bindet die Open()-Methode in Analogie zur Attach(void)-Methode aus irgendeinem Grund die aktuelle Diagrammkennung an das Objekt. Warum sollte sie das tun? Wenn ich mit dem aktuellen Diagramm arbeiten möchte, rufe ich die Methode Attach(void) { m_chart_id=ChartID(); } auf, und das ist alles. Aber hier habe ich eine offensichtlich fehlerhafte Situation, in der ich aus irgendeinem Grund mit dem Falschen zu arbeiten beginne. Im Allgemeinen ist es ein Problem mit der ChartOpen()-Funktion selbst, aber da sie es nicht ändern wollen, sollten sie es wenigstens in der Bibliothek ändern.

Ein weiteres Argument. Bitte denken Sie logisch. Die Methode heißt Open(). Es bedeutet, dass etwas Neues eröffnet wird! Und wir werden mit diesem neuen Element arbeiten. Aber hier arbeiten wir mit der alten Version. Ich kann keine Logik erkennen. Und Sie scheinen diese Ungenauigkeit für Ihre eigenen Zwecke zu nutzen.

Diese Methode ist überladen und kann sowohl das aktuelle Diagramm als auch das benötigte Diagramm binden. Und Ihre Änderung der Open-Methode wird die Möglichkeit, mit dem aktuellen Diagramm zu arbeiten, zunichte machen.

Was wird es töten? Die Attach()-Methode steht weiterhin zur Verfügung und tut das, was sie vorher tat. Wie Sie sagten, prüfen Sie die Rückgabe-ID der Funktion Open(), und wenn sie kleiner als 0 ist, rufen Sie die Methode Attach(void) auf. Das ist alles. Ich verstehe einfach nicht, warum Sie so ein Durcheinander machen müssen, wenn Sie einfach die Methode Attach(void) aufrufen und das aktuelle Diagramm anhängen können.

Vielleicht verstehe ich Sie nicht. Dann nennen Sie mir ein Beispiel.

Bitten Sie auch die Entwickler der Standardbibliothek um eine Beschreibung der Struktur der Bibliothek. Viele Menschen verstehen das nicht und fangen an, Fehler zu machen, und du machst mit ihnen mit und machst alles kaputt, was du gemacht hast.

Was für eine laute Aussage... Denken Sie nicht, dass Sie schlauer sind als andere, das sind Sie vielleicht nicht.