C'est l'optimiseur de code qui a tout jeté et laissé la fonction vide. Le point d'arrêt s'est déplacé à la même extrémité de la fonction et a fonctionné.
Je me suis un peu emballé avec le premier exemple, je suis d'accord. Mais qu'en est-il du second ? Eh bien, le point d'arrêt reste à l'intérieur de la condition et ne se déplace pas. Le déclenchement d'un point d'arrêt induit l'utilisateur en erreur en lui faisant croire que la condition d'entrée a été remplie, alors que ce n'est peut-être pas le cas du tout :
class A{
public:
bool m_flag;
A* m_next;
A(bool flag) : m_flag(flag){}
void test(){
if(m_flag){
printf("1");
m_next = m_next; // Вручную установленная точка останова срабатывает как для false так и true условий//m_next = &this; // Ok
}
}
};
voidOnStart(){
{A a(false); a.test();} // Result: breakpoint Expected result:
{A a(true); a.test();} // Result: printf + breakpoint Expected result: printf + breakpoint
}
MT5 (build 2460) quelque chose s'est cassé lors de l'utilisation de l'héritage des classes de modèles, dans les versions précédentes, y compris la build 2450, tout fonctionnait.
namespace NameSpace{
struct A{};
template<typename T>
struct B : public A{}; // 'A' - declaration without type
};
struct D : public NameSpace::B<int>{
int data;
};
voidOnStart(){
D d;
}
Pourquoi dansOBJ_TRENDBYANGLE on ne peut pas connaître l'angle de manière programmatique ?
Nous pouvons définir l'heure et les prix des deux points de façon programmatique, mais l'angle renvoie 0.
Si nous déplaçons OBJ_TRENDBYANGLE manuellement, la valeur de l'angle normal est retournée.
Je veux simplement placer du texte sur la ligne de tendance au même angle que la ligne de tendance elle-même.
Mais la ligne de tendance ne renvoie pas l'angle, alors que OBJ_TRENDBYANGLE a une seconde coordonnée fixe et lorsque l'échelle du graphique change en raison de la hausse ou de la baisse du prix, nous obtenons de fausses informations...
Структура является набором элементов произвольного типа (кроме типа void). Таким образом, структура объединяет логически связанные данные разных типов. Объявление структуры Имя структуры нельзя использовать в качестве идентификатора (имени переменной или функции). Следует иметь ввиду, что в MQL5 элементы структуры следуют непосредственно друг...
C'est l'optimiseur de code qui a tout jeté et laissé la fonction vide.
Le point d'arrêt s'est déplacé à la même extrémité de la fonction et a fonctionné.
Je me suis un peu emballé avec le premier exemple, je suis d'accord.
Mais qu'en est-il du second ? Eh bien, le point d'arrêt reste à l'intérieur de la condition et ne se déplace pas.
Le déclenchement d'un point d'arrêt induit l'utilisateur en erreur en lui faisant croire que la condition d'entrée a été remplie, alors que ce n'est peut-être pas le cas du tout :
Le point d'arrêt a été déplacé à la même extrémité de la fonction et a fonctionné.
Vous ne pensez pas que c'est un bug ?
C++ en ligne: https://onlinegdb.com/S1E503pj8
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Questions sur la POO dans MQL5
fxsaber, 2020.05.30 10:04
J'ai obtenu un résultat inattendu.Pourquoi dansOBJ_TRENDBYANGLE on ne peut pas connaître l'angle de manière programmatique ?
Nous pouvons définir l'heure et les prix des deux points de façon programmatique, mais l'angle renvoie 0.
Si nous déplaçons OBJ_TRENDBYANGLE manuellement, la valeur de l'angle normal est retournée.
Je veux simplement placer du texte sur la ligne de tendance au même angle que la ligne de tendance elle-même.
Mais la ligne de tendance ne renvoie pas l'angle, alors que OBJ_TRENDBYANGLE a une seconde coordonnée fixe et lorsque l'échelle du graphique change en raison de la hausse ou de la baisse du prix, nous obtenons de fausses informations...
Pourquoi le compilateur donne-t-il un avertissement ?
UPD : non
int ArrayInitialize( uchar array[], uchar value ) ;
il n'est pas pratique d'écrire
Code 401 - quelle est l'erreur ?
Quoi de neuf ?
401
L'héritage de cette classe est impossible car elle est déclarée avec le spécificateur final.
Pourquoi le compilateur donne-t-il un avertissement ?
UPD : non
int ArrayInitialize( uchar array[], uchar value ) ;
Il n'est pas pratique d'écrire
0xFF est probablement transformé en 4 octets par le compilateur.
Code 401, quelqu'un peut-il me dire ce qu'est cette erreur ?
trouvé
401
L'héritage de cette classe est impossible car elle est déclarée avec le spécificateur final.
La question est la suivante : il n'y a pas de modificateur final, mais il y a une erreur, ou quoi ?
0xFF est probablement transformé en 4 octets par le compilateur.
non, mais il s'initialise correctement