Erreurs, bugs, questions - page 2697

 
Bug MT5 (build 2375) erreur de compilation lors de l'appel d'une fonction via son pointeur, lorsqu'un tableau de pointeurs vers une fonction est utilisé :

#define  PRINT(x) ; Print(#x, ":", string(x))

void test(){
   PRINT(__FUNCSIG__);
}

template<typename T>
void call(T f_ptr){
   f_ptr();
}


template<typename T>
class A{
public:
   T arr_1[1];
   
   typedef void (*ff)();
   ff arr_2[1];  
   
   
   T test_1(){
      return arr_1[0];
   } 
   
   ff test_2(){
      return arr_2[0];
   } 
   
   T operator[](int index){
      return arr_1[index];
   }
};

void OnStart(){
   typedef void (*ff)();
   ff arr[1];
   arr[0] = test;   
   
   ff f_ptr = arr[0];
   f_ptr();             //Ok
   call(arr[0]);        //Ok
   arr[0]();            //Compile Error: ')' - expression expected   
   
   
   A<ff> a;             
   a.arr_1[0] = test;
   a.arr_2[0] = test;
   
   
   a.arr_1[0]();        //Compile Error: ')' - expression expected   
   a.arr_2[0]();        //Compile Error: ')' - expression expected   
   
   a.test_1()();        //Compile Error: ')' - expression expected   
   a.test_2()();        //Compile Error: ')' - expression expected   
   
   a[0]();              //Ok ???
}


 
Sergey Dzyublik:
MT5(build 2375) erreur de compilation du bogue lors de l'appel d'une fonction via son pointeur, lorsqu'un tableau de pointeurs vers une fonction est utilisé :

Un bug très ancien.

 

Un conseil - dans les fenêtres de fichiers ouverts de MetaEditor, où est enregistrée leur liste pour les ouvrir plus tard ?

De temps en temps, ME s'ouvre à partir de zéro, bien qu'avant cela, un tas de fichiers étaient ouverts. Cela pourrait être dû à des mises à jour.

Je veux sauvegarder manuellement la liste, ou peut-être une autre solution ?

 
Aleksey Mavrin:

Un conseil - dans les fenêtres de fichiers ouverts de MetaEditor, où est enregistrée leur liste pour les ouvrir plus tard ?

De temps en temps, ME ouvre à partir de zéro, bien qu'avant cela un tas de fichiers aient été ouverts. Cela pourrait être dû à des mises à jour.

Je veux sauvegarder manuellement la liste, ou peut-être une autre solution ?

Il y a une liste dans le registre, il y a une liste dans le fichier ini "metaeditor.ini" via ME ==> Fichier - Ouvrir le dossier de données (Ctrl + Shift + D) ==> Config ==> metaeditor.ini
Vous avez plus de chances d'avoir besoin de la seconde.

 
fxsaber:

Un bug très ancien.

Je me souviens avec certitude qu'une fois, il a fonctionné comme il le devait.
Je suis allé vérifier et j'ai ajouté quelques variantes supplémentaires pour appeler des pointeurs vers une fonction à partir de leur tableau.

Il s'avère que tout fonctionne lorsque le tableau de pointeurs vers une fonction se trouve à l'intérieur d'une classe et que l'élément spécifique du tableau est accessible via operator[].
Dans le même temps, si vous utilisez une fonction ordinaire pour accéder à un élément, une erreur de compilation se produit à nouveau... C'est un miracle...

 
Existe-t-il un moyen de contourner le redimensionnement automatique de l'indicateur ? Disons qu'il y a deux graphiques dans la sous-fenêtre de l'indicateur, est-il possible d'effectuer un redimensionnement de l'axe vertical sur un graphique et pas sur le second ? De sorte que le deuxième graphique n'affecte pas la remise à l'échelle.
 
Bug MT5 (build 2375), malgré une spécialisation explicite lorsque la fonction template surchargée est appelée, la fonction template par défaut est toujours appelée, ce qui entraîne un dépassement de pile.
C++ en ligne(https://onlinegdb.com/BJTFdUDD8)
template<typename T>
void test(T &arr[], T value){
    printf("1");
};

template<typename T, typename TT>
void test(T* &arr[], TT* value){
    printf("2");
    test<T*>(arr, value);
};

class A{};

void OnStart(){
   void* arr[] = {};
   A* ptr;
   test(arr, ptr);         // result: 2,2,2,2,2,2,2,2,...    should be: 2, 1
}
 
bool s_sel = SymbolSelect("", true);
s_sel = true;

Corrigez ça, s'il vous plaît.

 

L'info-bulle ne donne qu'une seule valeur ENUM.


 
fxsaber:

L'infobulle ne donne qu'une seule valeur ENUM.


Où peut-on en trouver s'il n'y en a pas du tout ?