Erreurs, bugs, questions - page 2328

 
A100:

J'ai proposé la variante la plus simple qui pourrait être mise en œuvre demain (pas dans 10 ans) et qui serait similaire au C++ (sinon pourquoi changer quoi que ce soit). De plus, si operator*() n'est pas et ne sera pas implémenté (il y avait des informations à ce sujet sur le forum), on ne voit pas pourquoi operator->() serait soudainement implémenté (ils sont du même ordre).

Elle n'est pas nécessaire sous cette forme demain ou dans 10 ans. Et vous n'avez pas besoin de similitude externe, vous avez besoin de fonctionnalités.

Porter au moins partiellement la STL du C++. Ce n'est pas seulement l'opérateur-> qui est en jeu ici, nous avons besoin de beaucoup plus.

operator-> serait le premier pas vers les pointeurs intelligents.


 

En fait, tout ne va pas bien avec le casting implicite tel qu'il est actuellement.

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

Vous pouvez voir que la distribution dynamique est incluse dans la distribution implicite.

MAIS

Tout d'abord, nous ne savons pas pourquoi il est inclus alors que le dynamic cast est explicitement présent dans le langage.

deuxièmement, il est très mal inclus car l'erreur de cast dynamique dans le cas d'une fonction peut être contrôlée (sortie d'un mauvais pointeur) mais le cast implicite ne peut pas l'être ! car il lève une exception incontrôlable.

2018.11.23 20:31:47.348 test (AUDNZD,M5) casting incorrect des pointeurs dans 'test.mq5' (17,11)

Il n'a aucun effet.

Vous devez soit donner un pointeur invalide comme fonction, soit exclure le cast dynamique du cast implicite et donner une erreur de compilation.

 

Oui, avec ce problème, travailler avec la POO est mal contrôlé et peu fiable. Quelque part, vous changez le type à un endroit du programme, et ensuite il explose à je ne sais où. Dans ces exemples, vous pouvez en quelque sorte vous en sortir en utilisant des béquilles, parce qu'il y a une simple affectation de pointeur, et tout est devant vous. Mais en général, quand un pointeur est passé à une fonction et qu'il est dynamiquement converti en quelque chose d'inconnu, vous n'avez aucun moyen de le contrôler.

 
Alexey Navoykov:

Un point est un opérateur universel dans MQL.

Cela dépend de la façon dont on voit les choses. On peut dire qu'il est universel : il fonctionne aussi bien avec les objets qu'avec les pointeurs.

Ou vous pouvez dire que . ne fonctionne qu'avec des objets, et il ne fonctionne avec des pointeurs que dans la mesure où le pointeur est implicitement converti en objet, c'est-à-dire dans le cas de

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

entrée

    a.f();

est équivalent à ne pas

    a->f();

a

    (*a).f();
 

il y a cette structure

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

il y a une variable OrdersInfo order, quand j'essaie de l'écrire dans un fichier

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

le compilateur donne : 'order' - les structures contenant des objets ne sont pas autorisées

Quel pourrait être le problème ?


 
Andrii Djola:

il y a cette structure

il y a une variable OrdersInfo order, quand j'essaie de l'écrire dans un fichier

le compilateur donne : 'order' - les structures contenant des objets ne sont pas autorisées

Quel pourrait être le problème ?


Ici

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

énumère les restrictions.

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

MT4 sur le trafic UPU est négatif, le compteur d'historique téléchargé a commencé à augmenter ...


 
Lorsque vous allez sur la page des produits d'un auteur, il n'y a aucun moyen de savoir quels produits sont destinés à la bonne plateforme (4 ou 5). Est-il possible de diviser les produits de cette page par plateforme ?
 
Où puis-je obtenir les codes pour les widgets de mon signal pour les forums ? Je ne les vois que pour les sites web...