Errori, bug, domande - pagina 2328

 
Alexey Navoykov:
Non stai prestando attenzione.

O tu, andiamo dritti al punto.

 
A100:

Ho offerto la variante più semplice che potrebbe essere implementata domani (non tra 10 anni) e sarebbe simile al C++ (altrimenti perché cambiare qualcosa). Inoltre, se operator*() non è e non sarà implementato (c'erano informazioni al riguardo sul forum), non è chiaro perché operator->() sarebbe improvvisamente implementato (sono dello stesso ordine).

Non è necessario in questa forma domani o tra 10 anni. E non avete bisogno di somiglianze esterne, ma di caratteristiche.

Per portare almeno parzialmente STL da C++. Non è solo l'operatore-> che è in gioco qui, abbiamo bisogno di molto di più.

operator-> sarebbe il primo passo verso i puntatori intelligenti.


 

In effetti, non tutto va bene con il cast implicito come è ora.

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");
}

Potete vedere che il cast dinamico è incluso nel cast implicito

MA

In primo luogo, non sappiamo perché sia incluso quando il cast dinamico è esplicitamente presente nel linguaggio.

in secondo luogo è incluso molto male perché l'errore di cast dinamico in caso di funzione può essere controllato (uscita del cattivo puntatore) ma il cast implicito no, perché lancia un'eccezione incontrollabile

2018.11.23 20:31:47.348 test (AUDNZD,M5) casting errato di puntatori in 'test.mq5' (17,11)

Non ha alcun effetto.

O devi dare un puntatore non valido come funzione, o escludere il cast dinamico dal cast implicito e dare un errore di compilazione.

 

Sì, con questo problema, lavorare con l'OOP è scarsamente controllato e inaffidabile. Da qualche parte si cambia il tipo in un posto del programma, e poi esplode in chissà dove. In questi esempi, si può in qualche modo cavarsela con l'uso di stampelle, perché c'è una semplice assegnazione del puntatore, e tutto è di fronte a voi. Ma in generale, quando un puntatore viene passato a qualche funzione e cast dinamicamente a qualcosa di sconosciuto, non si ha modo di controllarlo.

 
Alexey Navoykov:

Un punto è un operatore universale in MQL.

Dipende da come la si guarda. Si può dire che è universale: funziona sia con gli oggetti che con i puntatori.

Oppure si può dire che . funziona solo con gli oggetti, e funziona con i puntatori solo nella misura in cui il puntatore è implicitamente castato all'oggetto, cioè nel caso di

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

ingresso

    a.f();

è equivalente a non

    a->f();

a

    (*a).f();
 

c'è questa struttura

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

c'è una variabile OrdersInfo order, quando provo a scriverla in un file

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;
}

il compilatore dà: 'ordine' - le strutture contenenti oggetti non sono ammesse

Quale potrebbe essere il problema?


 
Andrii Djola:

c'è questa struttura

c'è una variabile OrdersInfo order, quando provo a scriverla in un file

il compilatore dà: 'ordine' - le strutture contenenti oggetti non sono ammesse

Quale potrebbe essere il problema?


Qui

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

elenca le restrizioni.

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

MT4 sul traffico UPU è negativo, il contatore della storia scaricata ha iniziato ad aumentare ...


 
Quando si va alla pagina dei prodotti di qualsiasi autore, non c'è modo di dire quali prodotti sono per la piattaforma giusta (4 o 5). È possibile dividere i prodotti di questa pagina per piattaforma?
Motivazione: