Fehler, Irrtümer, Fragen - Seite 2416

 
Andrey Pogoreltsev:

Hier besteht kein Bedarf an Eindeutigkeit. Es sollte einfach die Reihenfolge sein, in der die überladenen Methoden angewendet werden. D.h. die Aufgabe der Überlastungslösung besteht nicht darin, ein Dilemma zu schaffen, sondern die am besten geeignete Methode zu wählen. Wenn wir den Zugriffsmodifikator ignorieren, wird die erste Methode aus der Tabelle genommen oder es hängt von der Compiler-Implementierung ab, aber es gibt keine Zweideutigkeit.

Was wäre, wenn es zum Beispiel 2 Methoden mit unterschiedlichen Eingabeparametern gäbe?

Zurück zu C++, der gleiche Vektor hat einen:

Es handelt sich also um eine völlig normale Situation.

Sie haben ein sehr einfaches Beispiel für Grundschulen genannt. Es scheint nichts mit dem ursprünglichen Beispiel zu tun zu haben.


Alexey Navoykov:

In diesem Beispiel handelt es sich um eine Methode eines nicht konstanten Objekts, so dass sie unter sonst gleichen Bedingungen aufgerufen werden muss.

Diese Regel war mir nicht bekannt, danke.

Wenn wir das Casting entfernen und das Argument für beide Methoden vom Typ int machen, lässt sich der Code normal kompilieren. Es ist also das Casting, das den MQL-Hänger verursacht. Dieses Casting darf den Code nicht beeinflussen, da er identisch ist.

Die Ursache des Problems scheint darin zu liegen, dass der Compiler nicht überprüft, ob das Casting für die überladenen Methoden identisch ist.

 

Im Allgemeinen müssen Sie, um dieses Problem (und viele andere in MQL) zu lösen, eine der Methoden in eine Hilfsklasse verschieben:

class A { };

class _B
{
 protected: 
  A _a[];
 public:        
  const A * operator[](uint i) const { return &_a[i]; }  
};

class B : public _B
{
 public: 
  A * operator[](uint i)       { return &_a[i]; }
};
 
fxsaber:

Sie haben ein sehr einfaches Beispiel für eine Grundschule gegeben. Es scheint nichts mit dem ursprünglichen Beispiel zu tun zu haben.

Sie sollten den C++-Standard lesen, um zu sehen, dass dies alles durch dieselbe Regel gelöst wird, die ich oben zitiert habe.
 
Slava:

Zunächst einmal wurden im Optimierungscache sowohl bei MT5 als auch bei MT4 die String-Parameter immer auf 63 Zeichen gekürzt.

Bei der Übertragung von Ereignissen darf die Zeichenkette auch nicht länger als 63 Zeichen sein

Was von außen kommt, ist also begrenzt

Was die Produkte für den Endverbraucher betrifft. Der Verkäufer muss die Einschränkungen berücksichtigen. Und wenn er sie nicht kennt, hat er sein Produkt nicht ausreichend getestet, bevor er es verkauft.

Es geht nicht darum, wie es war und ist, sondern wie es sein sollte, wenn man mit der Zeit gehen und sich zum Besseren verändern will.

 

Ich lief in dieses Problem, beim Testen eines EA, nach dem Einstellen der Parameter und Drücken der Start-Taste, die EA-Einstellungen werden auf Standard zurückgesetzt, was könnte das Problem sein?

In dem Video ein Beispiel

 
Dmitry Melnichenko:

Ich lief in dieses Problem, beim Testen eines EA, nach dem Einstellen der Parameter und Drücken der Start-Taste, die EA-Einstellungen werden auf Standard zurückgesetzt, was könnte das Problem sein?

Video-Beispiel

MT5 setzt sich im Tester auf die Standardeinstellungen zurück, nachdem Sie auf die Registerkarte "Einstellungen" gegangen sind

Siehe Beitrag #1.

 

Ich habe eine Frage in einem benachbarten Thread gestellt, aber dort scheinen nicht viele Leute nachzuschauen. Ich werde es hier duplizieren:

https://www.mql5.com/ru/forum/6343/page1020#comment_11112212

Kurz gesagt: Bei Futures (im Tester) werden Geschäfte eröffnet und geschlossen (durch SL/TP), aber immer mit null Gewinn. Kann es sich um einen Fehler im Prüfprogramm handeln? Oder ist ein Trick erforderlich?

Вопросы от начинающих MQL5 MT5 MetaTrader 5
Вопросы от начинающих MQL5 MT5 MetaTrader 5
  • 2019.03.26
  • www.mql5.com
Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000...
 

Compiler-Fehler: Beim Kompilieren (Syntax-Check) einer .mqh-Datei mit diesem Code wird kein Fehler angezeigt. Er wird nur beim Kompilieren der ausführbaren Datei angezeigt, was unbequem ist.

class A
{
 public: 
  A(int) {  }
};

class B : public A { };  // Здесь должна быть ошибка  'A' - wrong parameters count

B b;
 
Alexey Navoykov:

Compiler-Fehler: Beim Kompilieren (Syntax-Check) einer .mqh-Datei mit solchem Code wird der Fehler nicht erzeugt. Er wird nur beim Kompilieren der ausführbaren Datei erzeugt, was unbequem ist.

Denn ein Heder kompiliert im Prinzip nicht :)))

Wenn Sie den gesamten Compiler dazu zwingen, einen Header zu kompilieren, werden Sie eine Menge falsch positiver Ergebnisse erhalten.

PS. Auch der C++-Compiler beschwert sich nicht, wenn solche Klassen nicht verwendet werden.
 
Andrey Pogoreltsev:

Denn ein Heder kompiliert im Prinzip nicht :)))

Wenn man einen ganzen Compiler dazu zwingt, einen Header zu kompilieren, gibt es eine Menge falsch positiver Ergebnisse.

PS. Der C++-Compiler wird sich auch nicht beschweren, wenn solche Klassen nicht verwendet werden.

Ich bin mir bewusst, dass es nicht kompiliert. Ich spreche von der Syntaxprüfung (die in ME auch "Compile" genannt wird), weil ich sie in einem früheren Beitrag sogar in Klammern angegeben habe. Wenn Sie die Syntaxprüfung auch im C++-Compiler ausführen (normalerweise über die Befehlszeile), schimpft er wie ein Rohrspatz.

Grund der Beschwerde: