Erreurs, bugs, questions - page 1087

 
Au moins, le compilateur devrait avertir que a.f() n'est pas const.
class A {
public:
        int f() { return ( 1 ); }
};

class B {
public:
                B( const A *aa ) : a( aa ) {}
        int g() { return ( a.f() ); } //должно быть предупреждение, поскольку a.f() не const
        const A *a;
};
 
A100:
Au moins, le compilateur devrait avertir que a.f() n'est pas const.
Merci pour votre diligence, les deux erreurs ont été corrigées.
 
mql5:
Merci pour l'info, les deux erreurs ont été corrigées.
Seule la dernière n'est pas techniquement une erreur - seul un avertissement devrait l'être. Il s'agit uniquement d'une erreur si
class B {
public:
        A * const a;
};

Mais dans les modèles, je vous donnerai des exemples plus tard.

 

Ici aussi, ce n'est pas clair.

class A {
public:
};

void ex1( const A* &t1, const A* &t2 )
{
        const A* t = t1;
        t1 = t2;
        t2 = t;
}

void OnStart()
{
    const A *a1 = new A(), *a2 = new A();
    Print( "Было :" a1, " ", a2 ); // Было :1 2
    ex1( a1, a2 );
    Print( "Стало:"  a1, " ", a2 ); // Стало:2 1
    delete( a1 );
    delete( a2 );
}

tout fonctionne correctement, mais si vous ajoutez la fonction intermédiaire ex2(...)

void ex2( const A* &t1, const A* &t2 ) { ex1( t1, t2 ); }

void OnStart()
{
    сonst A *a1 = new A(), *a2 = new A();
    Print( "Было: ", a1, " ",  a2 ); // Было :1 2
    ex2( a1, a2 );
    Print( "Стало:",  a1, " ",  a2 ); // Cтало:2 2           <-----
    delete( a1 ); delete( a2 );
}

Le résultat est différent. Qu'a fait ex2(...) ? - a juste passé les pointeurs par référence sur

Veuillez jeter un coup d'œil à

 
A100:

Ici aussi, ce n'est pas clair.

tout fonctionne correctement, mais si vous ajoutez la fonction intermédiaire ex2(...)

Le résultat est différent. Qu'a fait ex2(...) ? - a juste passé les pointeurs par référence sur

Veuillez jeter un coup d'œil à

Merci, erreur d'optimisation de la langue, corrigée.
 

Ce n'est pas la première fois, mais c'est la seule fois que vous obtenez de telles photos lors du téléchargement, ce qui signifie que vous devez définir certains critères (vous avez probablement une certaine taille).
). Ils sont affichés normalement partout ailleurs. S'il vous plaît, dites-moi ce qui ne va pas.


 
Une erreur de compilation inutile se produit si la macro utilise une conversion de type de résultat et que la valeur de retour n'est ensuite pas utilisée (parfois elle est nécessaire, parfois elle ne l'est pas).
int g( int x ) { return ( x ); }

#define  F( X )    (long)g( X )

void OnStart()
{
        int f = F( 0 ); //нормально
        F( 0 );         //ошибка компиляции
}
 
A100:
Une erreur de compilation inutile se produit si une macro utilise une conversion de type de résultat et que la valeur de retour n'est pas utilisée par la suite (parfois elle est nécessaire, parfois non).

Cela n'a rien à voir avec l'utilisation des définitions.

Une simple définition équivalente donnera également la même erreur

(long)g(0);


'(long)' - expression has no effect


P.S. Maintenant, il y aura une voracité ici.

 

Après avoir recompilé l'indicateur, l'erreur "array out of range" a commencé à se produire lors du travail avec des tableaux dynamiques.

Cela ne s'est pas produit avant. Que faire ?

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
MoneyJinn:

Après avoir recompilé l'indicateur, l'erreur "array out of range" a commencé à se produire lors du travail avec des tableaux dynamiques.

Cela ne s'est pas produit avant. Que faire ?

Si vous avez des lignes similaires au début du fichier

#include <File.mqh> , ces fichiers d'inclusion ont très probablement été modifiés depuis votre précédente compilation, par vous ou par quelqu'un d'autre.