Erreurs, bugs, questions - page 2528

 

Ce comportement est-il correct ?

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

class name

  {

public:

   int func()

     {

      static int t=0;

      t++;

      return t;

     }

  };

name A,B;

//+------------------------------------------------------------------+

void OnInit()

  {

   Print("A "+A.func());

   Print("B "+B.func());

  }

//+------------------------------------------------------------------+

/*

2019.08.10 20:39:57.533 MyTest (EURUSD_i,H1) A 1

2019.08.10 20:39:57.533 MyTest (EURUSD_i,H1) B 2

Attendu

2019.08.10 20:39:57.533 MyTest (EURUSD_i,H1) A 1

2019.08.10 20:39:57.533 MyTest (EURUSD_i,H1) B 1

Puisque différentes instances de classes sont déclarées

 
Vladimir Pastushak:

Ce comportement est-il correct ?

bien sûr
 
TheXpert:
bien sûr

Les variables statiques sont donc visibles en dehors de leurs objets ?

 
Vladimir Pastushak:

Les variables statiques sont donc visibles en dehors de leurs objets ?

Et si c'était comme ça, quel serait l'intérêt de la statique ?

class name{
  int t=0;
public:
   int func() {
     return t++;
   }
};
 
Tout le monde est invité à participer au fil de discussion sur les tests de CPU pour l'optimisation.
 

Bonjour,

J'ai remarqué un bug répliqué sur plusieurs brokers dans MT5 2085.


1) Si le rectangle a une date de fin dans le futur (par exemple 2020), il disparaîtra de l'écran lors d'un zoom arrière, lors d'un zoom avant il réapparaîtra.

2) Si un graphique a des barres avec des dates du futur (par exemple, un graphique personnalisé en tic-tac dont les barres commencent en octobre 2019), il est impossible de dessiner dessus, lorsque je sélectionne une ligne et un rectangle et que je clique sur le graphique pour dessiner, rien ne se passe. Il s'avère alors que l'objet a été dessiné de travers.


Veuillez trouver ce qui ne va pas et corriger l'erreur. Je peux faire une vidéo si nécessaire. Merci !

 
Veuillez m'aider à le découvrir. Le code suivant, dans le testeur, ouvre la fenêtre de chargement du fichier de configuration en appelant le menu correspondant.
#include <WinAPI\winuser.mqh>

#define  GA_ROOT           0x00000002

#define  WM_COMMAND                     0x0111
#define  WM_CONTEXTMENU     0x007B

#define  DTM_SETSYSTEMTIME 0x1002

#define  MN_GETHMENU     0x01E1  

#define  PRINT(x) ; Print(#x, ":", string(x))
#define  PRINT64(x) ; printf("%s%s%#.08x", #x, ":", x)

long GetHandle(long handle, int &controls[]){
   long next_handle = handle;                                                                        
   for (int i = 0; i < ArraySize(controls); i++){
      next_handle = user32::GetDlgItem(next_handle, controls[i]);
      PRINT64(next_handle);
   }           
   return next_handle;                
} 

void OnStart(){
  long RootHandle = user32::GetAncestor(::ChartGetInteger(0, CHART_WINDOW_HANDLE), GA_ROOT);
  PRINT64(RootHandle);  
  
  int controls[] = {0xE81E, 0x804E, 0x28EF, 0x28FE}; 
  long handle = GetHandle(RootHandle, controls);
  PRINT64(handle);
  
  
//  PRINT(user32::SendMessageW(handle, WM_CONTEXTMENU, 0, -1));
  PRINT(user32::PostMessageW(handle, WM_CONTEXTMENU, 0, -1));
  PRINT("Sleep");
  Sleep(1000);

  const long hpopup=user32::FindWindowW("#32768", NULL);
  PRINT64(hpopup);

  const long hmenu = user32::SendMessageW(hpopup, MN_GETHMENU,0,0);
  PRINT64(hmenu);
  
  uint id=user32::GetMenuItemID(hmenu, 0);
  PRINT64(id);
  
  PRINT(user32::SendMessageW(RootHandle,WM_COMMAND,id,0)); // Выбор пункта меню "Загрузить"
/*
  Sleep(100);
  
  const long hwnd = GetLastActivePopup(RootHandle);
  PRINT64(hwnd);
*/  
}

Ce code fonctionne bien lorsque l'onglet Options est sélectionné dans le testeur. Ensuite, le commentaire mis en évidence dans le code SendMessage renvoie 1.

Mais si vous changez d'onglet, le menu est appelé, mais il ne sélectionne pas l'élément "Load" - SendMessage renvoie 0. En même temps, dans le menu ouvert, il est possible de sélectionner l'élément sans aucun problème.

Pouvez-vous me dire où est le problème, que SendMessage renvoie zéro ?

 

Bonjour à tous !

J'ai loué un VPS et arrêté de copier les signaux. Lorsque je débranche le VPS, tout fonctionne. Le journal donne les erreurs. A quoi peut-il être lié ?

2019.08.12 23:03:18.632 MQL5.community : l'autorisation a échoué

2019.08.12 23:03:18.632 Signal : '77060013' : échec de l'obtention de la liste des signaux, erreur de connexion

Dossiers :
 

Question sur les caractères autorisés dans les identifiants. Exemple

#define  MACRO( x )              x## AAA
void OnStart()
{
        int xyz;
        int MACRO( BBB ); //нормально
}

Le résultat :

Reçu un identifiant de variable avec un espace.

Si nous réécrivons l'exemple comme ceci :

#define  MACRO( x )              x##:AAA
void OnStart()
{
        { int MACRO( BBB ); } //(1) //нормально
        { int BBB:AAA;      } //(2) //Error: 'AAA' - semicolon expected
}
alors nous pouvons formuler une contradiction : Quelle est la différence entre (1) et (2) ?
 
A100:

Question sur les caractères autorisés dans les identifiants. Exemple

Le résultat :

Reçu un identifiant de variable avec un espace.

Si nous réécrivons l'exemple comme ceci :

alors nous pouvons formuler une contradiction : Quelle est la différence entre (1) et (2) ?

D'un point de vue C/C++, il y a une erreur dans µl. N'importe quel nombre d'espaces/commentaires peut être inséré avant/après l'opérateur ##, les tokens seront d'abord décomposés et ensuite le préprocesseur commencera, c'est-à-dire qu'il ne verra même pas ces espaces, le standard hash_hash en a un exemple :

#define  hash_hash # ## #
#define  mkstr(a) #  a
#define  in_between(a) mkstr(a)
#define  join(c, d) in_between(c hash_hash d)
char p[] = join(x, y);    // equivalent tochar p[] = "x ## y";
#define  MACRO( x )              x##:AAA

seuls les jetons qui forment ensemble un jeton valide peuvent être utilisés.

ZS : certaines personnes disent que c/s++ ne fait pas autorité pour eux, pourquoi continuent-ils à les mentionner, et de toute façon c'est mcl, pas ..., peut-être ont-ils une explication appropriée ?