Erreurs, bugs, questions - page 1729

 
Les commentaires non pertinents pour ce sujet ont été déplacés vers "Comment déterminer à quel indicateur appartient chaque sous-fenêtre".
 
A100:

Erreur de compilation :

Apparu dans la version 1447
Merci pour le post, le contrôle de constance des paramètres passés a été corrigé.

Il y aura maintenant une erreur de compilation dans les deux cas, le code doit être modifié pour éviter l'erreur :
template<typename T>
void f1( const T* const & a[] ) {}    << добавлена константность ссылки
class A {};
void f2( const A* const & a[] ) {}    << добавлена константность ссылки
class B {
        void g1() const { f1( a ); } //error: 'f1' - cannot to apply function template
        void g2() const { f2( a ); } //нормально
        A *a[];
};
 
константность ссылки

Je n'ai vu ça nulle part. Est-ce la norme ?

 
Ilyas:
Maintenant, dans les deux cas, il y aura une erreur de compilation, afin d'éviter l'erreur, le code doit être modifié :

Veuillez également vérifier cette contradiction (ici en face - erreur en bas)

template<typename T>
void f1( const T& a[] ) {}
class A {};
void f2( const A& a[] ) {}
class B {
        void g1() const { f1( a ); } //нормально
        void g2() const { f2( a ); } //error: 'a' - parameter conversion not allowed
        A *a[];
};
 

Comment le MQL5 fonctionne-t-il avec la mémoire ?

Par exemple, il y a le code suivant :

class Alfa {}
class Beta
  {
private:
   Alfa  *ptr_a;
   Alfa   obj_a;
public:
   Beta(void) { ptr_a = new Alfa(); }
  ~Beta(void) { delete ptr_a; }
   Metod(void) {...}
  }
//---

int OnInit(void) {
   Beta *ptr_obj = new Beta();
   Beta obj;
//---
   return INIT_SUCCEEDED;
}
void OnDeinit(const int reason) {
   delete ptr_obj;
}

selon lequel la mémoire dans "heap" sera allouée pour l'objet ptr_obj, et la mémoire automatique sera allouée pour l'objet obj. Si le fonctionnement du gestionnaire de mémoire MQL5 est clair pour ces objets :

1. l'objetptr_a de l'objetptr_obj se voit allouer de la mémoire dans le "heap".

2. La mémoire de l'objetobj_a de l'objetobj est automatiquement allouée.

Comment le gestionnaire de mémoire du MQL5 est organisé dans ces cas :

3. Dans quelle zone de mémoire se trouve l'objet obj_a de l'objet ptr_obj?

4. Dans quelle zone de la mémoire se trouve l'objet ptr_a de l'objet obj.

 
A100:

Veuillez également vérifier cette contradiction (ici en sens inverse)

C'est correct, ici avec la saisie, T = A *.
 
void f( const A* &Array[] );

Avec ce transfert, il est possible de permuter les éléments du tableau (et la taille), mais il n'est pas possible de permuter les éléments eux-mêmes. N'est-ce pas ?

void f( const A* const &Array[] );

Et ici, les éléments (et la taille) ne peuvent pas non plus être intervertis. Est-ce correct ?

 
fxsaber:

Je n'ai vu ça nulle part. Est-ce la norme ?

Écrit pour ne pas écrire : il devrait y avoir une référence à un tableau constant de pointeurs vers des objets constants.
 
fxsaber:

Avec ce transfert, il est possible de permuter les éléments du tableau (et la taille), mais il n'est pas possible de permuter les éléments eux-mêmes. N'est-ce pas ?

Et ici, les éléments (et la taille) ne peuvent pas non plus être intervertis. Est-ce correct ?

Oui, c'est exact.
 
Ilyas:
C'est vrai, ici en dactylographie, T = A *

Alors il y a une erreur de compilation ici

template<typename T>
void f1( const T  const & a[] ) {} //error: 'const' - unexpected token
class A {};
void f2( const A* const & a[] ) {}
class B {
        void g1() const { f1( a ); }
        void g2() const { f2( a ); }
        A *a[];
};