Erreurs, bugs, questions - page 246

 
AlexSTAL:

Il s'agit d'une méthode de classe

https://www.mql5.com/ru/docs/standardlibrary/technicalindicators/cindicator

#include<Indicateurs\Indicator.mqh>

Je vois. Apparemment,denkir n'a pas déclaré#include<Indicators\Indicator.mqh>.

Mais une recherche dans la Référence ne permet toujours pas de trouver cette fonction.

 
Urain:

Alors pourquoi le compilateur jure-t-il, quelle est l'ambiguïté de l'appel ?


apparemment les types int à long ou vice versa sont convertis, probablement vous pouvez seulement par le nombre de paramètres ou par les types qui ne sont pas automatiquement convertis recharger les fonctions

SZZ : ne fonctionne qu'avec les long, les int passés en paramètres seront automatiquement convertis en long.

 
IgorM:

apparemment les types int à long ou vice versa sont convertis, probablement vous pouvez seulement par le nombre de paramètres ou par les types qui ne sont pas automatiquement convertis recharger les fonctions

SZY : ne fonctionne qu'avec les longs, les types int que vous passez en paramètre seront automatiquement convertis en long.

Même chanson.

class CA
  {
public:
   void set(long i,long j,long n){Print("перегрузка long");};
   void set(long i,long j,int n){Print("перегрузка int");};
  };

void OnStart()
  {
//---
   CA a;
   int Int=3;
   long Long=4;
   a.set(1,2,Int);
   a.set(1,2,Long);
  }

Le but était de rendre la surcharge de fonctions pour tous les types sans exception.

Et si un type ne correspond pas aux valeurs de code i et j, il générera un avertissement.

 
Urain:

Chers développeurs, veuillez me dire ce qu'est un appel ambigu à une fonction surchargée (c'est ce que jure le compilateur) :

set" - appel ambigu à une fonction surchargée



Oui, il y a une erreur, nous la corrigerons après la publication de la version de base.

pour l'instant, vous pouvez utiliser

class CA
  {
public:
   void set(int i,int j,long n){Print("перегрузка long");};
   void set(int i,int j,int n){Print("перегрузка int");};
  };

void OnStart()
  {
//---
   CA a;
   int Int=3;
   long Long=4;
   a.set((int)1,(int)2,Int);
   a.set((int)1,(int)2,Long);
  }
 
Urain:

Il n'y a aucun problème non seulement avec la surcharge de int et long, la surcharge de n'importe quel type le problème sera le même.

C'est juste que le compilateur traite un paramétrage explicite d'une manière différente.

Désolé, je n'ai pas utilisé MT5 depuis deux semaines, car je vois tellement de messages de colère après les trois dernières mises à jour que je ne veux même pas savoir si le compilateur ne fonctionne pas ou si j'ai la mauvaise version, ce qui est le cas pour vous.

comme ça :

class CA
  {
public:
   void set(int i,int j,long n){Print("перегрузка long");};
   void set(int i,int j,double x){Print("перегрузка double");};
  };
  
void OnStart()
  {
//---
   CA a;
   int Int=3;
   double doubl=4;
   a.set(1,2,Int);
   a.set(1,2,doubl);
  }

ça marche, build 362.

 
mql5:

Oui, c'est un bug, nous le corrigerons après la publication de la version.

En attendant, vous pouvez utiliser ceci

a.set((int)1,(int)2,Long);

Merci. Nous garderons cela à l'esprit.
 
Yedelkin:

Je vois. Apparemment,denkir n'a pas déclaré#include<Indicators\Indicator.mqh>.

Mais une recherche dans le manuel ne permet toujours pas de trouver cette fonction.

Ce n'est pas suffisant !

Il s'agit d'une méthode d'une classe externe ! !!

 
AlexSTAL:

Ce n'est pas suffisant !

Il s'agit d'une méthode de classe externe !!!

Je ne suis pas un expert en la matière, je préfère tout écrire à la main. Pourriez-vous s'il vous plaît dire àDenkir ce qu'il faut faire, étape par étape.
 

Il faut probablement ajouter une telle chose :

#include <Arrays\Array.mqh>
#include <Arrays\ArrayObj.mqh>

Mais je n'ai pas besoin d' un objet des classes mentionnées. Ce dont j'ai besoin, c'est d'une fonction simple pour le type de base chaîne de caractères que j'ai décrit.

 
denkir:

Il faut probablement ajouter une telle chose :

Mais je n'ai pas besoin d' un objet des classes mentionnées. Ce dont j'ai besoin est une fonction simple pour le type de base string, que j'ai décrit.

Mais pour accéder aux méthodes de la classe, il faut déclarer la classe correspondante, dans notre cas c'est la classe CIndicator (MQL5 Reference / Standard Library / Classes for working with indicators / Basic classes / CIndicator). N'est-ce pas ?