Erreurs, bugs, questions - page 2674

 
Stanislav Korotky:
essayez d'ajouter une surcharge avec un lien
 
TheXpert:
essayez d'ajouter une surcharge avec une référence

Voulez-vous dire la surcharge de la référence d'objet ou la référence de pointeur (qui ne semble pas exister) ? Je ne sais pas comment glisser un pointeur vers une nouvelle instance distribuée dans une référence d'objet.

 
Artyom Trishkin:

Votre cycle n'est pas correct pour les positions de fermeture. Faites un cycle inverse.

Artyom Trishkin:

Votre cycle n'est pas correct pour les positions de fermeture. Faites un cycle inverse.

Je vais essayer, mais la façon de boucler n'est-elle pas importante si nous recherchons toutes les positions rentables de la même direction. Nous les passerons toutes en revue de toute façon et fermerons celles qui sont nécessaires.

 
Stanislav Korotky:

Voulez-vous dire surcharge avec référence objet ou référence pointeur (qui ne semble pas exister) ? Je ne sais pas comment glisser un pointeur vers une instance distribuée dans une référence d'objet.

Avec une référence d'objet.

Je l'ai comme ça :

class C {};

template<typename V>
void process(V value)
{
}

/* если добавить, компилируется
template<typename V>
void process(V& value)
{
}
*/

void process(C *ptr)
{
}
    
void OnStart()
  {
      C c;
      process(&c); // pointer, ok
      process(c); // 'process' - no one of the overloads can be applied to the function call       test2.mq5       32      7
  }
 
TheXpert:

en référence à des objets.

Je l'ai comme ça :

Ce n'est toujours pas aussi simple, désolé ;-). La classe est utilisée pour l'héritage :

class BaseFunctor
{
  public:
    virtual void process() = 0;
};

class MyFunctor: public BaseFunctor
{
  public:
    virtual void process() override
    {
    }
};

template<typename V>
void process(V value)
{
}

void process(BaseFunctor *ptr)
{
}

void process(BaseFunctor &ref)
{
}

void OnStart()
{
  process(new MyFunctor()); // 'process' - ambiguous call to overloaded function, could be one of 3 function(s)
}

Si vous pouviez créer un BaseFunctor, cela fonctionnerait, oui. Mais ce n'est pas le cas.

 
Pavel Kozlov:

Bonjour !

Merci d'avoir signalé l'erreur!

Pourriez-vous préciser le problème posé par la photo ?

Aucun problème pour le moment

 

Le code ci-dessous produit 牖漠摲牥⁳湩潦〉〮र〲थ⸰〰㠉┰〉〮र

C'est censé sortir le test de texte

Les fichiers se trouvent dans le dossier "Files".

La fonction dit que le handle est correct c'est 1 et immédiatement GetLastError dit erreur 5008 Wrong handle ....

Que dois-je faire ?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   core();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+
void core()
  {
   string value = "", name = "";

   name =  "Test" + "\\test.csv";
   Print(FileIsExist(name));

   ResetLastError();

   int m_hendle = -1;
   m_hendle = FileOpen(name, FILE_READ | FILE_WRITE | FILE_CSV);
   if(m_hendle != INVALID_HANDLE)
     {
      Print((string)m_hendle + "    " + name + " [" + (string)FileSize(m_hendle) + "]"+ (string)GetLastError());
       while(!FileIsEnding(m_hendle))
        {
         string sCurrent = FileReadString(m_hendle);
         Print("sCurrent = ", sCurrent);
        }
      FileClose(m_hendle);
     }
  }
//+------------------------------------------------------------------+
 
Sergey Dzyublik:
Très mauvais bug de MT5 (build 2316), bloquant tout développement ultérieur.
Vous créez plusieurs fois un objet enveloppé complexe avec le type interne "C", mais il s'avère être un type de données tout à fait différent, peut-être "B", "int", ce que vous voulez...

J'ai passé beaucoup de temps et d'efforts pour trouver et comprendre que le problème n'est pas dans le code mais dans le compilateur MQL. (C++ en ligne: https://onlinegdb.com/H1R1fR5ML)
Vraisemblablement, le problème se situe dans le travail du cache de la classe de modèle "main_wrapper" lors de la génération du code à la compilation lorsque la classe interne "internal_wrapper" de la classe de modèle "A" est passée en paramètre pour différents types de données (int, B*, B, C).
Le premier type de données est créé par la classe de modèle "main_wrapper<A<TEMPLATE_TYPE>::internal_wrapper>, ce type de données sera utilisé ultérieurement dans tous les objets du modèle.


Un autre bogue concernant la génération du code de la classe du modèle sera présenté ci-dessous.

Merci pour le post, corrigé

 
Vladimir Pastushak:

Le code ci-dessous produit 牖漠摲牥⁳湩潦〉〮र〲थ⸰〰㠉┰〉〮र

C'est censé sortir le test de texte

Les fichiers se trouvent dans le dossier "Files".

La fonction dit que le handle est correct c'est 1 et immédiatement GetLastError dit erreur 5008 Wrong handle ....

Que dois-je faire ?

Dans quel encodage se trouve le fichier ?

 
Sergey Dzyublik:

Un autre bogue MT5 (build 2316) avec la génération de code de classe de modèle lors de l'utilisation de la classe interne.
C++ en ligne: https://onlinegdb.com/HJkKXAqMU

Merci pour le post, corrigé