Erreurs, bugs, questions - page 49

 

Pourquoi le compilateur ne voit-il pas la différence entre int et colour.

   void              CreateLabel(int x,int y,color COLOR);   
   void              CreateLabel(int x,int y,int n);

Je redéfinis une fonction, il me gronde (dit que je fais attention à mélanger les pédales).

'CreateLabel' - ambiguous call to overloaded function with the same parameters
Si seulement il y avait des paramètres par défaut, mais il n'y a pas d'ambiguïté, il suffit de définir le type du paramètre passé et de continuer.
 
Urain:

Pourquoi le compilateur ne voit-il pas la différence entre int et colour.

J'outrepasse une fonction, il jure (dit de faire attention à mélanger les pédales).

Si seulement il y avait des paramètres par défaut, mais il n'y a pas d'ambiguïté, il suffit de définir le type du paramètre passé et c'est parti.
Dans ce cas, le compilateur se plaint que vous avez créé deux fonctions avec le même nom, et les paramètres passés n'ont rien à voir avec cela.
 
sergey1294:
Dans ce cas, le compilateur se plaint que vous avez créé deux fonctions avec le même nom, et les paramètres que vous passez n'ont rien à voir avec cela.

Dans ce cas, lisez ce que signifie le mot "surcharge".

SZ ainsi que la"surcharge de fonctions".

Документация по MQL5: Основы языка / Функции / Перегрузка функций
Документация по MQL5: Основы языка / Функции / Перегрузка функций
  • www.mql5.com
Основы языка / Функции / Перегрузка функций - Документация по MQL5
 
Urain:

Une question à la fraternité d'écriture, pas une erreur ou un bug, mais une question qui peut suggérer quoi...

Je veux obtenir le nom du pointeur à l'intérieur de la classe mais cela ne fonctionne pas.

En général, l'essentiel du problème est que je veux que le nom de la chaîne del'objet graphique soit attribué automatiquement.

Je veux obtenir un nom de chaîne pour lui automatiquement.

Lors de l'installation d'un objet graphique à partir d'une méthode de classe, le nom doit être automatiquement attribué en fonction du curseur.

Je ne sais pas encore comment le faire, je pense qu'on peut le faire à partir de zéro.


Il existe deux manières principales de nommer automatiquement un objet (avec différentes variations sur ce thème, lors de sa mise en œuvre) :

1. La génération des noms est basée sur une liste numérotée

Une classe distincte s'occupe du nommage de l'objet et gère les "numérateurs" (qui peuvent être soit pour tous les objets, soit pour un groupe spécifique d'objets).

Dans ce cas, le nom est formé sur la base de (de préférence) : le type d'objet, le nom du symbole (paire de devises), la notation textuelle du TF et le numéro de série de l'objet (pris au numérateur).

Dans ce cas, selon l'implémentation, vous pouvez suivre la présence de l'objet sur le graphique, et vous ne pouvez pas.

2. Le nom est formé sur la base de la date et de l'heure de création de l'objet.

Dans cette approche, le nom peut être formé sur la base de : type d'objet, nom de symbole, notation de texte TF et clé (formée sur la base de la date et de l'heure).

PS

Dans la première variante (à mon avis) il serait plus raisonnable d'implémenter en classe et en cycle complet la gestion des objets (création, modification et suppression)...

 
Urain:

Dans ce cas, lisez ce que signifie "surcharge".

ZS Eh bien, ainsi que la"surcharge de fonctions".

Je ne savais pas que c'était possible.
 
sergey1294:
Je ne savais pas que c'était possible.

Le polymorphisme et la surcharge de fonctions sont des principes de base de la POO qui devraient être présents dans tout langage qui se respecte.

Polymorphisme

Le polymorphisme est un phénomène par lequel une fonction (méthode) portant le même nom correspond à un code de programme différent (code polymorphe) selon la classe d'objet utilisée pour appeler la méthode. Le polymorphisme est assuré en changeant l'implémentation de la méthode de la classe ancêtre dans la classe descendante avec la préservation obligatoire de la signature de la méthode. Cela garantit que l'interface de la classe parente est préservée sans changement et permet de lier le nom d'une méthode dans du code avec des classes différentes - la méthode avec le nom donné est prise dans l'objet de la classe à partir de laquelle l'appel est effectué. Ce mécanisme est appelé liaison dynamique (ou tardive), par opposition à la liaison statique (précoce), qui est effectuée au moment de la compilation.

Surcharge des fonctions

Surcharge des procédures et des fonctions - la possibilité d'utiliser des sous-programmes de même nom : procédures ou fonctions dans les langages de programmation.


Exemple tiré de la bibliothèque standard des classes commerciales, classe CAccountInfo:

double MarginCheck(const string symbol,ENUM_POSITION_TYPE trade_operation,double volume) const;
double MarginCheck(const string symbol,ENUM_ORDER_TYPE trade_operation,double volume) const;
 
ddd06:

J'ai passé un long moment à discuter avec le respecté MetaQuotes et à leur prouver qu'ils avaient un pépin, et ils m'ont dit qu'il n'y avait pas de pépin.

Cependant, je suis resté sur mes positions et ils m'ont conseillé de demander à la communauté.

Ainsi, nous avons un indicateur et un conseiller expert qui prend les valeurs de l'indicateur.

Démarrer le test sur EURUSD du 01.07.2010 au 02.07.2010 sur М1

Nous regardons le journal et voyons que les valeurs d'un tampon changent, et que l'autre ne change pas.

Cela dure une heure, puis le deuxième tampon est vivant, mais si vous regardez les valeurs de l'indicateur, cela ne coïncide pas.

J'ai même essayé de changer de compte et de réinitialiser l'historique, mais ça n'a rien donné.

Voici un lien vers mon terminal en rar 90mbhttp://dl.dropbox.com/u/6290215/MetaTrader%205%201111.rar, tout y est configuré

Et l'indicateur avec le conseiller dans la pièce jointe

Vous avez soumis un code avec une erreur. Naturellement, c'est votre code qui donne les mauvaises informations. Vous avez ignoré nos remarques concernant la correction de l'erreur, proposant chaque fois un nouveau code et chaque fois avec une erreur.
 
Urain:

Pourquoi le compilateur ne voit-il pas la différence entre int et colour.

Je passe outre une fonction, il jure (il dit de faire attention à mélanger les pédales).

D'accord, il y aurait des paramètres par défaut, mais il n'y a aucune ambiguïté, il suffit de définir le type du paramètre passé et de poursuivre.
Il y a vraiment un problème - nous allons l'examiner.
 
Urain, merci pour votre message. L'erreur a été corrigée.
 
stringo:
Vous avez fourni le code avec une erreur. Naturellement, c'est votre code qui donne des informations erronées. Dans le même temps, vous avez ignoré nos commentaires sur la correction des erreurs, proposant chaque fois un nouveau code et chaque fois avec une erreur.

Cependant, si vous m'aviez dit qu'il ne devrait pas y avoir de synchronisation et que nous devrions l'intégrer dans le code...

Au lieu de cela, vous vous entêtez à dire que tout correspond.

mais TimeToString(time[0],TIME_DATE|TIME_MINUTES)," buf1-",buf1[1]," buf2-",buf2[1]) au lieu de TimeToString(time[1],TIME_DATE|TIME_MINUTES)," buf1-",buf1[1]," buf2-",buf2[1]) ;

il s'agit certainement d'une erreur, mais elle n'a pas affecté le point.

Je vais reporter l'ajout du nouvel indicateur pour vérifier à quel point je me suis trompé.

C'est-à-dire que vous disiez que tout coïncide et que vous avez corrigé le code de l'Expert Advisor. Mais en fait, rien ne coïncide et nous devrions corriger le code de l'indicateur (afin d'y intégrer la synchronisation).

Raison: