Erreurs, bugs, questions - page 1570

 
Non, c'est une salope, d'ailleurs, le typedef est censé résoudre le problème.
 
A100:

Nécessité d'affiner les modèles (sortir l'implémentation de la classe A {})

Je ne peux pas implémenter A::f3 en dehors de la classe A {}.

Mais à l'intérieur de la classe A {}, vous pouvez. Oui, vous pouvez... par exemple, f2(), mais l'inconvénient réside dans le but de prendre des fonctions encombrantes en dehors de la classe A {}. L'essentiel est que A::f1() peut être écrite en dehors de la classe A {} et que tout fonctionne alors que A::f3() ne le peut pas - le compilateur génère une erreur parce que A::f1() et A::f3() ne diffèrent principalement en rien.

C'est ainsi qu'il se compile normalement.

template<typename T>
class A { public:
template<typename T2>
        void f1( T2 t2 );
template<typename T2,typename T>
        void f2( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); }
template<typename T2,typename T>
        void f3( T2 t2, T tt );
        T t;
};
template<typename T2>
void A::f1( T2 t2 )       { Print( __FUNCSIG__, " ", typename( this.t ) ); } //?????????
template<typename T2,typename T>
void A::f3( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); } //error: 'T' - declaration without type

Et f1 et f3 sont un peu différents.

 
Andrey Barinov:

C'est ainsi qu'il se compile normalement.

Ce n'est pas le cas - le compilateur a simplement supposé qu'il n'y avait pas de OnStart - pas de problème.

ajouter

void OnStart()
{
        A<long> a;
}
 

Erreur de compilation : erreur interne n°9

Dossiers :
Test114.mq5  3 kb
 

Si vous modifiez quelques lignes, l'erreur se transforme en : erreur d'optimisation de l'arbre

Mais à l'origine (avant la simplification) l'erreur était : erreur de génération de code

Et tout s'arrête là - mais avant, tout fonctionnait bien.

Dossiers :
Test115.mq5  3 kb
 
A100:

Faites un grand nombre de sources d'amincissement différentes dans une seule archive. Ainsi, les développeurs pourraient l'utiliser avant de déployer une autre version boguée.

Appelez l'archive "test des poux". Il existe certainement de telles variantes de test pour différents types de compilateurs.

 
Erreur de compilation : erreur de génération de code
Dossiers :
Test116.mq5  2 kb
 


Legraphique d'optimisation s'arrête d'être dessiné à cause d'un calcul incorrect de la valeur du critère. Veuillez le corriger, car il est très pratique d'observer le processus d'optimisation sur le graphique.

Apparaît uniquement sur le critère Balance + max RF. // Du moins dans ma pratique (jusqu'à présent limitée).

// Seul le graphique se casse, l'optimisation est réussie.

----------- UPD

Проявляется только на критерии Balance + max RF.

J'avais tort.


 

Comportement différent de & et GetPointer

class A {};
class B {
        A *f() const { return GetPointer( a ); } //не генерирует ошибки
        A *g() const { return &a; }              //ошибка: 'return' - cannot convert from const pointer to nonconst pointer
        A a;
};
 

Le compilateur autorise les constantes non initialisées.

void OnStart()
{
        const int i;        //нормально, а должно быть как минимум предупреждение
	const int array[5]; //нормально, а должно быть как минимум предупреждение
        Print( "i=", i, ", j=", array[ 0 ] );
}