Fehler, Irrtümer, Fragen - Seite 2328

 
Alexey Navoykov:
Sie passen nicht auf.

Oder Sie. Kommen wir gleich zur Sache.

 
A100:

Ich habe die einfachste Variante angeboten, die morgen (nicht erst in 10 Jahren) implementiert werden könnte und die C++ ähnlich wäre (warum sollte man sonst überhaupt etwas ändern). Wenn operator*() nicht implementiert ist und auch nicht implementiert werden wird (es gab Informationen darüber im Forum), ist es außerdem unklar, warum operator->() plötzlich implementiert werden sollte (sie haben die gleiche Reihenfolge).

Sie wird weder morgen noch in 10 Jahren in dieser Form benötigt. Und Sie brauchen keine externe Ähnlichkeit, Sie brauchen Funktionen.

STL zumindest teilweise aus C++ zu portieren. Es geht hier nicht nur um den Betreiber->, wir brauchen viel mehr.

operator-> wäre der erste Schritt zu intelligenten Zeigern.


 

In der Tat ist nicht alles in Ordnung mit der impliziten Besetzung, wie sie jetzt ist.

class A
{};

class B : public A
{};

void OnStart()
{
   A* ab = new B;
   A* aa = new A;
   
   B* bb = ab; // ok
   
   B* ba1 = dynamic_cast<B*>(aa);
   Print(ba1 ? "ba1 ok" : "ba1 bad cast"); // bad cast

   B* ba2 = aa; // здесь неконтролируемый вылет
   Print(ba2 ? "ba2 ok" : "ba2 bad cast");
}

Sie sehen, dass die dynamische Besetzung in der impliziten Besetzung enthalten ist

BUT

Erstens wissen wir nicht, warum sie enthalten ist, wenn die dynamische Besetzung ausdrücklich in der Sprache vorhanden ist.

zweitens ist es sehr schlecht enthalten, weil dynamischer Cast-Fehler im Falle von Funktionen kontrolliert werden kann (schlechte Zeigerausgabe), aber impliziter Cast nicht! weil er eine unkontrollierbare Ausnahme auslöst

2018.11.23 20:31:47.348 test (AUDNZD,M5) falsches Casting von Zeigern in 'test.mq5' (17,11)

Sie hat keine Wirkung.

Sie müssen entweder einen ungültigen Zeiger als Funktion angeben oder den dynamischen Cast vom impliziten Cast ausschließen und einen Kompilierungsfehler melden.

 

Ja, mit diesem Problem ist die Arbeit mit OOP schlecht kontrolliert und unzuverlässig. Irgendwo ändert man den Typ an einer Stelle des Programms, und dann explodiert er an wer weiß wo. In diesen Beispielen kann man irgendwie mit Krücken davonkommen, weil es eine einfache Zeigerzuweisung gibt und alles vor einem liegt. Aber im Allgemeinen, wenn ein Zeiger an eine Funktion übergeben wird und dynamisch auf etwas Unbekanntes castet, hat man keine Möglichkeit, es zu kontrollieren.

 
Alexey Navoykov:

Ein Punkt ist ein universeller Operator in MQL.

Das hängt davon ab, wie man es betrachtet. Man kann sagen, es ist universell: Es funktioniert sowohl mit Objekten als auch mit Zeigern.

Oder man kann sagen, dass . funktioniert nur mit Objekten und mit Zeigern nur insofern, als der Zeiger implizit auf das Objekt gecastet wird, d. h. im Fall von

class A {
public:
    void f() {}
} *a;

Eintrag

    a.f();

ist gleichbedeutend mit nicht

    a->f();

a

    (*a).f();
 

Es gibt diese Struktur

struct OrdersInfo
{
   int      ticket;
   string   symbol;
   int      type;
   double   volume;
   double   open_price;
   double   stop_loss;
   double   take_profit;
   string   comment;
   int      magic;
};

es gibt eine Variable OrdersInfo order, wenn ich versuche, sie in eine Datei zu schreiben

bool WriteStr(OrdersInfo &order)
{
   int handle = FileOpen(m_file_name, FILE_WRITE | FILE_COMMON | FILE_BIN);
   if(handle != INVALID_HANDLE)
   {
      if(FileWriteStruct(handle, order) == 0) return false;
      
      FileClose(handle);
   }
   
   return true;
}

der Compiler meldet: 'order' - Strukturen, die Objekte enthalten, sind nicht erlaubt

Was könnte das Problem sein?


 
Andrii Djola:

Es gibt diese Struktur

es gibt eine Variable OrdersInfo order, wenn ich versuche, sie in eine Datei zu schreiben

der Compiler meldet: 'order' - Strukturen, die Objekte enthalten, sind nicht erlaubt

Was könnte das Problem sein?


Hier

https://www.mql5.com/ru/docs/files/filewritestruct

listet die Einschränkungen auf.

Документация по MQL5: Файловые операции / FileWriteStruct
Документация по MQL5: Файловые операции / FileWriteStruct
  • www.mql5.com
//|                                          Demo_FileWiteStruct.mq5 | //|                        Copyright 2013, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Структура для хранения данных свечи                              |...
 
Dankeschön
 

MT4 auf UPU Verkehr ist negativ, heruntergeladen Geschichte Zähler begann zu erhöhen ...


 
Wenn Sie die Produktseite eines Autors aufrufen, können Sie nicht erkennen, welche Produkte für die richtige Plattform (4 oder 5) bestimmt sind. Ist es möglich, die Produkte auf dieser Seite nach Plattformen zu unterteilen?