Fehler, Irrtümer, Fragen - Seite 1161

 
joo:

v4.3, benutzerdefinierte Firmware.

Das Hauptfenster ist im Querformat, andere Dialoge (Aufträge) sind im Hochformat. Lästiges unkontrollierbares Hin- und Herschalten zwischen Hauptfenster und Dialogen.

Komm schon.... nicht einmal spezialisierte Software wie Smart Rotator.... hilft

Es ist schon komisch, aber wenn man im Smart Rotator für das Terminal zwangsweise das Querformat einstellt, werden alle Fenster zum Querformat. aber ich will Hochformat! - Ich habe den Hochformatmodus für das Terminal eingestellt, und nun? - hehehe... noch immer sind einige Fenster im Querformat und einige im Hochformat.

 

Ein Fehler im Meta-Editor.

Angenommen, wir haben eine Funktion Obj(), die einen Zeiger auf ein Objekt zurückgibt:

class CObject {   public:     int value; }; CObject object;

CObject* Obj() { return GetPointer(object); }

Wenn wir uns nun direkt über die FunktionObj().value = 10 auf das Objekt beziehen, erscheint nach der Eingabe eines Punktes keine Pop-up-Liste der Klassenmitglieder und Methoden.

 
meat:

Die Klasse CArray ist kein Allheilmittel, da MQL keine Klassenmuster unterstützt. Unser Array besteht nicht notwendigerweise aus einfachen Typen, und es ist nicht sehr interessant, für jede neue Klasse in einem Programm eine vollständige Struktur der CArray-Abkömmlinge zu erstellen. Schauen Sie sich einfach an, wie viele Codezeilen jede von CArray abgeleitete Datei benötigt (ArrayInt.mqh, ArrayDouble.mqh usw.)

Und wie die Programmstruktur organisiert ist, ist zweitrangig. Um nicht vom Thema abzuschweifen: Wenn es einen Parameter gibt, der geändert werden kann (in diesem Fall ist es reserve_size), sollte es möglich sein, ihn zu erhalten.

Komplexe Typen werden von CObject geerbt und sicher in CArrayObj verpackt.

reserve_size - bricht mit dem Paradigma der wirtschaftlichen Programmierung. Sie ist nur für Anfänger gedacht und darf in normalen Sprachen überhaupt nicht vorkommen.

 
C-4:

reserve_size - verstößt gegen das Paradigma der sparsamen Programmierung. Sie ist nur für Anfänger gedacht und sollte in normalen Sprachen überhaupt nicht vorkommen.

Sie haben ein seltsames Paradigma. Die Reservierung dient dem sparsamen Umgang mit den Ressourcen, indem sie die Anzahl der Neuzuweisungen von Speicher und der Datenbewegungen reduziert (und das sind ziemlich teure Operationen). Und es ist ein Code-Entwickler, der diesen Parameter verwalten muss, denn nur er weiß im Voraus, wie sein Programm den Speicher nutzen wird. Und das hat nichts mit der Sprache zu tun, denn ein Array ist ein Array, es benötigt überall Speicher.

 
meat:

Das ist ein seltsames Paradigma für Sie. Die Reservierung dient genau dem sparsamen Umgang mit den Ressourcen, indem sie die Anzahl der Neuzuweisungen von Speicher und der Datenübertragungen (und das sind ziemlich teure Operationen) reduziert. Und es ist ein Code-Entwickler, der diesen Parameter verwalten muss, denn nur er weiß im Voraus, wie sein Programm den Speicher nutzen wird. Und das hat nichts mit der Sprache zu tun, denn ein Array ist ein Array, wie es ist, es benötigt überall Speicher.

Sie haben also bereits Ihre eigene Frage beantwortet:

Der Code-Entwickler sollte diesen Parameter verwalten, denn nur er weiß im Voraus, wie sein Programm den Speicher nutzen wird. Das hat überhaupt nichts mit der Sprache zu tun.

Sie hat nichts mit den sprachlichen Mitteln zu tun und muss daher auf einer höheren, der Benutzerebene, gelöst werden. Lösen Sie also Ihre Aufgabe mit den speziell für diese Aufgaben geschaffenen CArray*-Klassen, die übrigens diese Aufgabe hervorragend und wie dafür geschaffen bewältigen.

 
meat:

Sie haben ein seltsames Paradigma. Die Redundanz ist genau so konzipiert, dass sie Ressourcen sparsam einsetzt und die Anzahl der Neuzuweisungen von Speicherplatz und Datenübertragungen (die recht kostspielig sind) reduziert...

void TestFoo()
{
  CArrayObj listObj;
  listObj.Resize(100);
  for(int i = 0; i < 100; i++)
     listObj.Add(new CObject());
  int count = CountObj(listObj);
}

void CountObj(CArrayObj* obj)
{
   return obj.Size();
}
Super-Sparcode. Da die Anzahl der Elemente im Voraus bekannt ist, kommt es zu keinerlei Neuzuweisungen von Speicherplatz. Es werden keine Arrays übergeben, sondern Zeiger auf sie. Die Geschwindigkeit ist unglaublich hoch und es gibt keinen Bedarf an reserve_size. Was gefällt Ihnen an dieser Lösung nicht?
 
C-4:
Super-Sparcode. Es gibt keine Neuzuweisung von Speicherplatz, da die Anzahl der Elemente im Voraus bekannt ist. Es werden keine Arrays, sondern Zeiger auf sie übergeben. Die Geschwindigkeit ist unglaublich hoch und es gibt keinen Bedarf an reserve_size. Was gefällt Ihnen an dieser Lösung nicht?

Ach, wenn es doch nur so einfach wäre... In der realen Welt ist die Anzahl der Elemente normalerweise nicht im Voraus bekannt. Außerdem ändert sich diese Zahl dynamisch. Ihr vereinfachtes "Hallo Welt"-Beispiel ist also bedeutungslos. Sie kann durch nur zwei Zeilen ersetzt werden:

CObject listObj[100];
int count = ArraySize(listObj);

Was soll dieser Unsinn? Wenn Sie persönlich den Parameter reserve_size nicht verwenden, können Sie das gerne tun. Aber ziehen Sie nicht den Schluss, dass alle anderen ein Narr oder ein Anfänger sind. Vielleicht verstehen Sie einfach etwas nicht: In Standard-STL-Containern, die für die Arbeit mit Arrays (Vektoren, Strings usw.) konzipiert sind, sind Methoden wie Reserve und Kapazität immer vorhanden.

 
joo:

Komm schon.... nicht einmal spezialisierte Software wie Smart Rotator.... hilft

Es ist komisch, aber wenn ich in Smart Rotator für das Terminal das Querformat erzwinge, werden alle Fenster im Querformat angezeigt, aber ich will Hochformat! - Ich habe das Terminal in den Hochformatmodus versetzt, und nun? - hehehe... noch immer sind einige Fenster im Querformat und einige im Hochformat.

funktioniert gut mit der Standard-Firmware (zumindest wie erwartet)
 

In der neuesten Version funktioniert die Suche im MetaEditor (das Feld in der oberen rechten Ecke) nicht mehr richtig. Wenn ich dort das gesuchte Wort eingebe, wird es automatisch durch einen ähnlichen Ausdruck ersetzt, der irgendwoher stammt, von dem ich nicht weiß, woher er kommt, und das ohne Grund. Das Ergebnis ist, dass Sie nichts in Ihrem Code finden können. Ich versuche zum Beispiel, eine Variable namens "ERROR_VALUE" zu finden, erhalte aber stattdessen "error_value 7".

Frage: Was ist hier los? Woher kommt dieser Restmüll in der Suchzeile und wie bekommt man ihn raus?

 
meat:

In der neuesten Version funktioniert die Suche im MetaEditor (das Feld in der oberen rechten Ecke) nicht mehr richtig. Wenn ich dort das gesuchte Wort eingebe, wird es automatisch durch einen ähnlichen Ausdruck ersetzt, der irgendwoher stammt, von dem ich nicht weiß, woher er kommt, und das ohne Grund. Das Ergebnis ist, dass Sie nichts in Ihrem Code finden können. Ich versuche zum Beispiel, eine Variable namens "ERROR_VALUE" zu finden, erhalte aber stattdessen "error_value 7".

Frage: Was ist los? Woher kommt dieser linke Müll in der Suchzeile und wie bekommt man ihn wieder raus?

Säubern Sie die Tastatur.