Erreurs, bugs, questions - page 1172

 

Erreur de compilation, build 966

#property library
#define  CLR     C'255,255,255'//White

class A {
        A() { clr = CLR; }
        color clr;
};
la version 932 est bonne
 
A100:
Après la substitution directe, le code ne compile pas à cause du commentaire
 

dépend du contenu du commentaire

#define  CLR     C'255,255,255'//не White

C'est bon.

 
Eh bien, il ne devrait pas compiler de toute façon )
 

Les commentaires ne sont jamais substitués - le compilateur les ignore simplement, sinon #define dans la plupart des cas ne pourrait pas être utilisé avec des commentaires du tout //.

#define  ONE 1 //один
#define  TWO 2 //два

int a = ONE + TWO;
приводит к int a = 1 + 2;
а не к int a = 1 //один + 2 //два;
Dans tous les cas, remplacez // par /**/ dans https://www.mql5.com/ru/forum/1111/page1190#comment_993854.
#define  CLR     C'255,255,255'/*White*/

Le résultat est le même - erreur de compilation.

 
Auparavant, sur la page de profil d'une autre personne, il était possible de passer au fil d'actualité (de cet utilisateur) via un lien. Maintenant, je ne vois pas un tel lien, mais si j'ajoute /news à la fin de l'URL, cette page s'ouvre normalement. Est-ce un bug que le lien ait disparu de l'interface utilisateur ?
 
marketeer:
Veuillez expliquer la situation suivante. J'ai un indicateur multi-devises, dont les valeurs ne changent pas en fonction du graphique auquel il est attaché - il calcule les valeurs pour les instruments spécifiés et n'est pas lié à la fenêtre actuelle. Je trace manuellement des lignes de support et de résistance sur cet indicateur. Maintenant, le truc : si je fais glisser un autre outil de l'aperçu du marché dans la fenêtre, l'apparence de l'indicateur reste la même et les lignes disparaissent. Si vous ouvrez la boîte de dialogue Liste d'objets, ces objets y sont toujours répertoriés. Les valeurs des points de terminaison (dates et valeurs) restent les mêmes (c'est-à-dire qu'elles devraient être visibles aux mêmes endroits) - c'est compréhensible, elles n'ont pas été modifiées. Cependant, les lignes ne sont pas visibles. Si vous faites ensuite glisser l'ancien outil qui se trouvait à l'origine sur la fenêtre, les lignes redeviennent visibles. Quel est le problème ?

Trouvé et corrigé.

Merci de m'avoir contacté. Il s'agit en fait d'un bug générique - cela a toujours fonctionné de cette façon auparavant.

 

Vous ne pouvez pas appliquer l'opérateur abrégé !() - erreur de compilation

class A {
public:
        bool operator !() { return ( false ); }
};

bool f1( A* a ) { return ( f3( a ) ); }
bool f2( A* a ) { return ( !a ); }             //ошибка компиляции
bool f3( A* a ) { return ( a.operator!() ); }  //нормально
bool f4( A& a ) { return ( !a ); }

void OnStart()
{
        A *a = new A;
        Print( f1( a ));
        Print( f4( a ));
}

Si le compilateur comprend (et il le fait) que f4( a ) signifie que 'a' est un objet et non un pointeur/scriptor comme un nombre)

il devrait aussi comprendre que !a' signifie la même chose pour 'a' (objet, pas pointeur/numérique)

en d'autres termes, si

class A {
    void f() {}

void OnStart()
{
        A a1;
        A *a2 = new A;
        a1.f();
        a2.f();
}
a1.f() et a2.f() signifient la même chose, que a1, a2 soit un pointeur ou un objet, en quoi l'opérateur !() est-il pire ?
 

Je dois ajouter que, par exemple, il n'y a pas d'erreur de compilation avec operator+(), et il n'y en a pas non plus si nous ajoutons simplement operator+(), qui n'est pas utilisé du tout, au premier exemple ci-dessus

class A {
public:
        bool operator !() { return ( false ); }
        bool operator +() { return ( false ); }
};
mais dans ce cas, une autre incertitude apparaît
class A {
public:
        bool operator !() { return ( true ); }
        bool operator +() { return ( true ); }
};

int g( A& a )  { return ( 10 ); }
int g( int )   { return ( 20 ); }

void OnStart()
{
        A *a = new A;
        Print( !a );            //здесь    считает                 'a' - числом ???
        Print( a.operator!() ); //здесь не считает (что правильно) 'a' - числом
        Print( g( a ) );        //здесь не считает (что правильно) 'a' - числом, хотя есть g( int ) и нет g( A* )
}
 
Dernier exemple
class A {
public:
        bool operator !() { return ( true ); }
        bool operator +() { return ( true ); }
};
void OnStart()
{
        A *a = new A; //Результат:
        Print( !a );  //          false
        Print( +a );  //          true
         delete( a );
}