Fehler, Irrtümer, Fragen - Seite 1354

 

Meine Herren, wie würden Sie die Benutzerfreundlichkeit der Sprache durch das Hinzufügen derEigenschaft: https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx deutlich verbessern?

Das ständige Tanzen mit Settern, Gettern und Klammern ist sehr lästig.

 
Alexey Navoykov:

Meine Herren, wie würden Sie die Benutzerfreundlichkeit der Sprache durch das Hinzufügen derEigenschaft: https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx deutlich verbessern?

Das ständige Tanzen mit Settern, Gettern und Klammern ist sehr lästig.

Alexey, ich bin dafür, aber wir sollten eine Abstimmung machen, nicht hier. Hier sind einige Krücken, ich habe es nicht in MQL versucht http://rsdn.ru/article/vcpp/props.xml
Свойства в С++
  • rsdn.org
В этой статье автор рассматривает различные способы реализации свойств в стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++, тогда как другие годятся для применения в любой программе, написанной на языке C++.
 
Alexey Volchanskiy:
Alexey, ich bin dafür, aber wir sollten eine Abstimmung machen, nicht hier. Es gibt einige Krücken hier, ich habe es nicht in MQL versucht http://rsdn.ru/article/vcpp/props.xml

Irgendetwas stimmt mit der Kodierung Ihres Links nicht. Ich bekomme eine Menge roten Text. Aber ich weiß, was Sie meinen, ich habe über diese Krücken schon einmal gelesen. Es ist nicht möglich, es in MQL im Moment zu implementieren, weil Ghost-Operator-Überladung nicht unterstützt wird.Aber dieses native Feature in VS ist sehr nützlich, besonders wenn es in ein Makro verpackt ist. Und es verbraucht keine zusätzlichen Ressourcen. Es ist also höchste Zeit, dass wir Eigenschaften auch in MQL implementieren, denn ohne sie sieht alles unhandlich aus.

 
Alexey Volchanskiy:

Ich habe es herausgefunden, fand einen Fehler in MQL4 Compiler. Ich war unaufmerksam und habe 2 Tage gebraucht, um sie zu finden. Der Kern des Problems ist folgender: Ich werde Ihnen den einfachsten Code geben. Ich erhalte keinen Kompilierungs- oder Warping-Fehler, sondern einen Laufzeitfehler.

    double ptest = double(test); // тут должна быть ошибка компиляции!!! 

Hier gibt es keinen Grund für einen Fehler. Es handelt sich hier um eine klare Typenumwandlung. In VS würde das folgendermaßen aussehen

  double ptest = (double)(int)(test);
Welchen Unterschied würde das machen?
 
A100:
Hier gibt es keinen Grund für einen Fehler. Hier gibt es eine explizite Typumwandlung.
Sie können eine Klasse nicht in einen sinnvollen Typ umwandeln, auch nicht explizit. Hier liegt eindeutig ein Fehler vor.
 
Bitte erinnern Sie mich daran, wie man die Symbole im Marktübersichtsfenster (MT4, MT5) sortiert. Auf dem einen Terminal sind sie gut sortiert, auf dem anderen sind sie ein einziges Durcheinander. Ich habe das schon vor langer Zeit erledigt - ich weiß nicht mehr, wie ich es gemacht habe. In der Dokumentation steht nichts darüber, außer dass man die Symbole einzeln an eine neue Stelle ziehen kann. Aber ich habe es nicht genau gemacht - es ist möglich, die gesamte Liste manuell zu sortieren. :-/
 
Vasiliy Sokolov:
Sie können eine Klasse nicht in einen sinnvollen Typ umwandeln, auch nicht explizit. Es handelt sich definitiv um einen Fehler.

Es handelt sich nicht um eine Klasse, sondern um einen Zeiger, und ein Zeiger ist eine Zahl.

class A{};
void f()
{
        A *a;
        int i = int(a);
}

C++ kompiliert ohne Fehler

Wenn Sie die direkte explizite Umwandlung in double deaktivieren, wird beim nächsten Mal int statt double mit demselben Ergebnis angezeigt, und der Compiler wird wieder schuldig sein. Sie müssen Ihre eigenen Fehler von den Fehlern des Compilers unterscheiden.

 
A100:

Es handelt sich nicht um eine Klasse, sondern um einen Zeiger, und ein Zeiger ist eine Zahl - lernen Sie die Mathematik.

C++ kompiliert ohne Fehler

Wenn Sie die direkte explizite Umwandlung in double deaktivieren, wird beim nächsten Mal int statt double mit demselben Ergebnis angezeigt, und der Compiler ist wieder schuldig. Sie sollten Ihre eigenen Fehler von den Fehlern des Compilers unterscheiden.

Dort gibt es keinen Zeiger, weil es in MQL4/5 keine Zeiger gibt. Es gibt Griffe.

----------------------

Ich habe eine Antwort vom Service Desk erhalten

Support-Team 2015.08.24 09:44
Danke für den Hinweis, ich werde es korrigieren.
Hier muss in der Tat ein Kompilierungsfehler vorliegen.


Support-Team 2015.08.24 14:39

Status: Offen Geschlossen
Danke für den Beitrag, korrigiert. Der Compiler wird nun einen Kompilierungsfehler melden.
 
Alexey Volchanskiy:

Dort gibt es keinen Zeiger, weil es in MQL4/5 keine Zeiger gibt. Es gibt Deskriptoren.

Ein Deskriptor ist immer noch eine bestimmte Zahl. Die Tatsache, dass diese Zahl nicht auf einen bestimmten Speicherplatz verweist, entzieht ihr nicht die Eigenschaften einer Zahl.
 
A100:
Ein Deskriptor ist immer noch eine bestimmte Zahl
Was die Art der Speicherung angeht, haben Sie natürlich Recht.
Es macht aber keinen Sinn, einen Deskriptor in eine Zahl umzuwandeln oder umgekehrt, und es ist höchstwahrscheinlich ein Fehler im Code.
Wenn in naher Zukunft eine entsprechende Konvertierungsanweisung in der Klasse überladen wird, wird sie aufgerufen werden.