Erreurs, bugs, questions - page 1749
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
peut-être qu'un adblock est installé ? qui bloque toutes les pop-ups
Je n'ai rien changé. Tout fonctionnait avant.
Lors du paiement, j'appuie sur ce bouton
Rien ne revient, sauf ceci.
Oui, je comprends votre question. Il existe une fonction avec une signature plus appropriée, mais elle ne peut pas être appelée car elle est protégée. Oui, le comportement est différent de celui de Studio : dans MKL, le contrôle des types est plus strict (dans ce cas). Je ne sais pas si cela doit être considéré comme un bug. Si vous contrôlez le type de l'argument passé à la fonction, il n'y a pas de problème.
Le contrôle est plutôt sélectif et donc plus incohérent, ce qui découle d'ici
class A {
}public:
void f( int ) const {} /*(1)*/
void f( int ) {} /*(2)*/
};
class B : public A {
public:
void f( int ) const {} /*(3)*/
};
void OnStart()
{
B b; //не const B
b.f( 0 ); //(*)
Mais le C++ n'analyse pas toujours une classe de base pour trouver une méthode plus appropriée si la classe dérivée possède déjà une méthode appropriée.
Et MQL - dans l'exemple précédent, il a analysé la classe de base pour trouver une méthode plus appropriée, alors que dans celui-ci il ne le fait pas (ici aussi bien que le C++ appellera B::f/*(3)*/), ce qui signifie qu'il n'y a pas d'approche unifiée
Un autre exemple de contrôle incohérent : C++ trouve le code suivant
void f( int i ) const {}
void f( uint i ) {}
};
void OnStart()
{
A a;
a.f((int)0 );
}
Le contrôle est plutôt sélectif et donc plus incohérent, ce qui découle d'ici
class A {
}public:
void f( int ) const {} /*(1)*/
void f( int ) {} /*(2)*/
};
class B : public A {
public:
void f( int ) const {} /*(3)*/
};
void OnStart()
{
B b; //не const B
b.f( 0 ); //(*)
Mais le C++ n'analyse pas toujours une classe de base pour trouver une méthode plus appropriée si la classe dérivée possède justement une méthode appropriée.
Et MQL - dans l'exemple précédent, il a analysé la classe de base pour trouver une méthode plus appropriée, alors que dans celui-ci il ne le fait pas (ici aussi bien que le C++ appellera B::f/*(3)*/), ce qui signifie qu'il n'y a pas d'approche unifiée
Un autre exemple de contrôle incohérent : C++ trouve le code suivant
void f( int i ) const {}
void f( uint i ) {}
};
void OnStart()
{
A a;
a.f((int)0 );
}
Quel compilateur C++ utilisez-vous ? J'utilise gcc et tout passe sans aucune erreur.
void f( int i ) const {} //1
void f( unsigned int i ) {} //2
};
void OnStart()
{
A a;
a.f((int)0 );
}
(1) ou (2). Je vais maintenant insérer le message du compilateur
C'est vraiment un contrôle strict : une méthode est plus adaptée en termes de signature, l'autre en termes de constance.
Il s'agit en fait d'un contrôle strict : une méthode est plus appropriée en raison de sa signature, l'autre en raison de sa constance.
Et on ne voit pas bien pourquoi vous écririez une telle chose.
Remplacez f -> opérateur[], prenez votre exemple récent - pensez à comment faire [] à la fois à gauche et à droite. Ajoutez la constance au goût - puis enveloppez le tout dans un modèle et vous obtenez quelque chose de similaire.
Si faire const - considérer sans si
S'il ne peut y avoir d'ambiguïté, vous devez au moins émettre un avertissement.
Remplacez f -> opérateur[], prenez votre exemple récent - pensez à comment faire [] à la fois à gauche et à droite. Ajoutez la constance à votre goût - puis enveloppez le tout dans un gabarit et vous obtiendrez quelque chose de similaire.
De quel exemple s'agit-il ? Pourriez-vous donner non pas la source, mais l'entrée finale qui devrait fonctionner ?
Vous devriez vous retrouver avec quelque chose comme ça
{
A<int> a;
int b = a[ 0 ];
a[ 0 ] = a[ 1 ];
a[ 1 ] = b;
}
Vous devriez vous retrouver avec quelque chose comme ça
{
A<int> a;
int b = a[ 0 ];
a[ 0 ] = a[ 1 ];
a[ 1 ] = b;
}
Les indices sont-ils constants ?
les indices sont numériques : 1 2 3 ... Il est sous-entendu qu'à la place de A<int> il peut y avoir aussi const A<int>.