Erreurs, bugs, questions - page 1954

 
Alexey Kozitsyn:
Merci pour cette idée. Je les avais complètement oubliés.

C'est bizarre. J'obtiensune erreur de compilation de votre code.

object of 'B' cannot be returned, copy constructor 'B::B(const B &)' not found

Sur la description de la fonction GetBMember (qui, en clair, dit de créer une copie). S'agit-il de la dernière version du compilateur ?

Lorsque ce problème est résolu par l'ajout d'un constructeur de copie B, vous pouvez alors retourner const B à partir de la méthode GetBMember.

Alors le compilateur jurera à la tentative de faire une Reset de la variable retournée :

'Reset' - call non-const method for constant object

 
Stanislav Korotky:

C'est bizarre. J'obtiens une erreur de compilation de votre code.

object of 'B' cannot be returned, copy constructor 'B::B(const B &)' not found

Sur la description de la fonction GetBMember. S'agit-il de la dernière version du compilateur ?

Lorsque ce problème est résolu par l'ajout d'un constructeur de copie B, vous pouvez alors retourner const B à partir de la méthode GetBMember.

Alors le compilateur jurera lorsque vous essayerez de faire une Reset de la variable retournée :

'Reset' - call non-const method for constant object

Ce code est juste un exemple écrit dans le navigateur. Je me demandais juste pourquoi le compilateur ne signale rien. Mais j'ai déjà compris.

Et, il n'y a pas du tout de constructeurs dans mon exemple :)

 

Bonjour ! 2017.08.03_18:45 GMT+3. J'ai écrit un fichier OOP SignalIchimoku.mqh . Mais lorsque j'ai besoin de faire des calculs simples à LongCondition() et ShortCondition() dans une fonction séparée, la fonction est écrite, le compilateur donne 0 erreur, 0 avertissement. Mais cette fonction ne fonctionne pas, aucun calcul n'est effectué. Le programme n'ouvre pas les transactions. J'ai vérifié : j'ai inséré la valeur de la variable Print() dans la fonction. Cette fonction est similaire aux fonctions StateStoch(int ind), ExtStateStoch(int ind) et CompareMaps() de SignalStoch.mqh , un fichier standard de la bibliothèque standard. Tout fonctionne dans le fichier standard, mais cela ne fonctionne pas pour moi. Pourquoi ? C'est encore "les règles simples" ? Qui sait ? Dis-moi. Si vous avez besoin de détails ou si vous avez des questions, -- écrivez. 18 H 59 GMT+3.

Dossiers :
 

CCanvas. Il y a un petit bug dans l'implémentation de la fonction FillCircle. Il est plus étroit d'un pixel, comme on peut le voir dans cette animation GIF:

De plus, l'algorithme est construit de manière très déraisonnable, puisque environ 30% des points sont dessinés deux fois. Ce problème est facilement résolu en déplaçant deux lignes de code, avec une augmentation de la vitesse de 30% en moyenne.
Voici la version originale de FillCircle :

void CCanvas::FillCircle(int x,int y,int r,const uint clr)
  {
   int f   =1-r;
   int dd_x=1;
   int dd_y=-2*r;
   int dx  =0;
   int dy  =r;
//--- draw
   while(dy>=dx)
     {
      LineHorizontal(x-dx,x+dx,y-dy,clr);
      LineHorizontal(x-dx,x+dx,y+dy,clr);
      LineHorizontal(x-dy,x+dy,y-dx,clr);
      LineHorizontal(x-dy,x+dy,y+dx,clr);
      //---
      if(f>=0)
        {
         dy--;
         dd_y+=2;
         f+=dd_y;
        }
      dx++;
      dd_x+=2;
      f+=dd_x;
     }
  }

Et voici la version corrigée :

void CCanvas::FillCircle(int x,int y,int r,const uint clr)
  {
   int f   =1-r;
   int dd_x=1;
   int dd_y=-2*r;
   int dx  =0;
   int dy  =r;
//--- draw
   while(dy>=dx)
     {
      LineHorizontal(x-dy-1,x+dy,y-dx,clr);
      LineHorizontal(x-dy-1,x+dy,y+dx,clr);
      //---
      if(f>=0)
        {
         LineHorizontal(x-dx-1,x+dx,y-dy,clr);
         LineHorizontal(x-dx-1,x+dx,y+dy,clr);
         dy--;
         dd_y+=2;
         f+=dd_y;
        }
      dx++;
      dd_x+=2;
      f+=dd_x;
     }
  }
 

L 'ordre en attente est supprimé (pas assez d'argent).

Un travail valide du conseiller expert, c'est lorsqu'aucune erreur ne se produit pendant son fonctionnement.

L'ordre en attente est supprimé (pas assez d'argent) est une erreur.

Le fait est qu'il est théoriquement impossible de suivre la marge nécessaire à l'ouverture d'un ordre, si celui-ci est ouvert avec un slippage.

Par exemple, nous avons établi et calculé qu'il y a suffisamment d'argent pour ouvrir un ordre de vente stop en attente à 1,500. (A 1.499 il n'y en a plus).

Le prix actuel est de 1,501.

Le tick suivant et nous avons un prix de 1.499.

Une tentative d'ouverture d'une commande et une erreur.

Par conséquent, nous avons d'abord envisagé la situation où cette erreur ne peut être évitée à 100%.

Ou ai-je manqué quelque chose ?

 

Je n'arrive pas à trouver comment extraire les fichiers mqh d'un sous-répertoire du dossierExperts.

comment tirer les fichiers mqh du dossier One vers le dossier Two ?

 
Vladimir Pastushak:

Je n'arrive pas à trouver comment extraire les fichiers mqh d'un sous-répertoire du dossierExperts.

comment tirer les fichiers mqh du dossier One vers le dossier Two ?


solution trouvée. Si le fichier, auquel vous voulez connecter l'injecteur, est situé dans Test\One, et l'injecteur dans Test\Two, alors...

C'est comme ça :

#include "..\Two\name.mqh""
Il s'avère que : ... - à partir de Un, allez à Test et Deux nom de fichier.mqh - à partir de Test, allez à Deux et sélectionnez le nom de fichier.mqh.
 
le profil ne montre pas "mes messages"

et dans les profils d'autres personnes
 
Vladimir Pastushak:

solution trouvée. Si un fichier auquel vous voulez connecter un inluder se trouve dans Test\One, et un inluder dans Test\Two, alors...

Comme ça :

Il s'avère que : ... - de Un, allez à Test et Deux nom de fichier.mqh - de Test, allez à Deux et sélectionnez le nom de fichier.mqh.

Il existe de telles constructions :

#include "..\..\Two\name.mqh"
 
igrok333:
Il n'affiche pas "mes messages" dans mon profil.

Et dans les profils d'autres personnes

Cela arrive souvent, apparemment le travail se fait.

Je ne me souviens pas de la dernière fois où cela a fonctionné, mais je n'ai pas vérifié aujourd'hui, peut-être que cela fonctionne déjà.

Raison: