Erreurs, bugs, questions - page 1588

 
Anton Zverev:

Alors où pensez-vous que le pointeur constant est ici !

Dans les méthodes f() et g(), le pointeur a devient constant.

Eh bien, il n'y a pas de tels pointeurs dans MQL5 qui ne peuvent pas être modifiés. Par conséquent, le modificateur const fait toujours référence aux objets auxquels le pointeur se réfère.

Vous ne devriez pas faire de telles conclusions catégoriques sans avoir une connaissance suffisante du sujet. MQL possède des pointeurs constants et les déclare de la même manière qu'en C++.

 
Alexey Navoykov:

Vous ne devriez pas faire de telles conclusions catégoriques sans une connaissance suffisante du sujet. Les pointeurs constants en MQL existent et sont déclarés de la même manière qu'en C++.

Comment déclarer un pointeur constant dans MQL5 !
 

Si je me souviens bien de l'explication des développeurs, la constance s'applique à la fois à l'objet et au pointeur.

C'est-à-dire qu'écrire const T* en MQL === const T* const en C++

C'était comme ça avant, c'est peut-être différent maintenant, mais j'en doute.

 

Erreur de compilation

template<typename T>
class A { public:
        bool operator==( const A& ); //error: 'operator' - function must have a body
        T t;
};
class B {
        A<int> a;
};
template<typename T>
bool A::operator==( const A& )  { return false; }
void OnStart()
{
        A<int> a, b;
        Print( a == b );
}
 

Erreur de compilation

template<typename T>
class A { public: T t; };
class B { public:
template<typename T> void g(   T  * );
template<typename T> void f( A<T> * );
};
template<typename T> void B::g(   T  * ) {} //нормально
template<typename T> void B::f( A<T> * ) {} //ошибка: 'f' - member function already defined with different parameters
void OnStart()
{
        A<int> a;
        B b;
        b.g( &a );
        b.f( &a );
}
 
A100:

...

template<typename T>
bool A::operator==( const A& )  { return false; }

Ça aurait dû être comme ça :

template<typename T>
bool A<T>::operator==( const A& )  { return false; }
 
Alexey Navoykov:

Ça aurait dû être comme ça :

Cela aurait été compatible avec C++, d'autre part - seule la classe B y "interfère" - si vous la supprimez, elle compile sans erreur. C'est la raison pour laquelle il vise à contrôler
 

Erreur de compilation

template<typename T>
class A {};
class B {
        void A() {}
        void f() { A(); } //error: 'A' - template mismatch
};
 

Erreur de compilation

template<typename T> class A {};
template<typename T> class B {};
class C {
template<typename T>
        void f( B<A<T> > * ) {}
        B<A<int> > *b;
public:
        void g() { f( b ); } //error: 'f' - cannot to apply function template
};
 
Merci, nous y travaillons.