Erreurs, bugs, questions - page 1417

 
Stanislav Korotky:

En conséquence, à l'intérieur de cette méthode, typename définit correctement le type passé, par exemple int, mais déjà à l'intérieur du constructeur B, typename est égal à string.

Le résultat de typename est toujours de type string, en d'autres termes typename peut être représenté conventionnellement comme une fonction
string typename( X );
 
A100:
le résultat de typename est toujours de type string, en d'autres termes
Ce n'est pas ce que je veux dire. typename retourne une chaîne contenant le nom du type. À l'intérieur d'une méthode de classe modèle, la chaîne dont le type est "int", et à l'intérieur du constructeur appelé à partir de là, la chaîne contient "string".
 
Stanislav Korotky:
Ce n'est pas ce que je veux dire. typename retourne une chaîne avec le nom du type. Dans la méthode de la classe modèle, le type de la chaîne est "int", et dans le constructeur appelé à partir de là, la chaîne contient "string".
class A { public:
template<typename T>
        A( T ) { Print( typename( T )); }
};
class B { public:
template<typename T>
        void f( T t ) { A a( t ); } //вызываем A::A(...)
};
void OnStart()
{
        B b;
        int i = 0;
        b.f( i );
}
Résultat : int
 

Le compilateur ne signale pas d'erreur si #endif est manquant.

#property library
#ifndef  MACRO
#define  MACRO

Il est préférable qu'il le fasse, sinon les erreurs sont difficiles à trouver.
 
A100:
Résultat : int.
Oui, cet exemple minimal fonctionne comme il le devrait, mais le code source plus complexe ne fonctionne pas. Je l'ai écrit dans SD.
 
CoderMQ4:

Les gars, est-ce un bug du Marché ou est-ce tout à fait normal ?


Je ne l'ai pas essayé, mais ça ne devrait pas fonctionner si c'est lié au matériel et non au système d'exploitation. C'est comme enlever le disque dur et le mettre sur une autre carte mère avec une autre vidéo. Je vais commencer à chercher de nouveaux conducteurs dès maintenant.

Ou est-ce que je comprends mal la machine virtuelle?

 

Un appel à une fonction virtuelle dans une instance d'une classe dérivée entraîne un appel à cette fonction depuis la classe de base, et non depuis la classe dérivée.

 
Ilya Malev:

Un appel à une fonction virtuelle dans une instance d'une classe dérivée entraîne un appel à cette fonction depuis la classe de base, et non depuis la classe dérivée.

C'est toujours le cas dans le constructeur. Pourquoi ? -> google C++ (ajouter le mot constructeur à la chaîne de requête)
 
A100:
Ils le font toujours dans le constructeur. Pourquoi ? -> google C++ (ajouter le mot constructeur à la chaîne de requête)

Merci, je ne le savais pas) Il serait bon de l'ajouter dans la référence MQL5, vous savez, là où les fonctions virtuelles et les constructeurs sont mentionnés. Ce n'est pas le cas dans toutes les langues.

 
Bonjour à tous !
J'ai récemment commencé à programmer et j'ai rencontré un tel problème, le StopLoss n'est pas défini. Pouvez-vous indiquer où se trouve l'erreur ?
int start()
{
si(CountTrades()==0)
{
double ima=iMA(Symbol(),PERIOD_H1,14,0,MODE_SMA,PRICE_CLOSE,1) ;
if(Ask>ima)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,",Magic,0,Blue) ;
si(ticket>0)
{
TP=NormalizeDouble(Ask+TakeProfit*Point,Digits) ;
bool modify1=OrderModify(ticket,OrderOpenPrice(),0,TP,0)
{
SL=NormaliserDouble(Ask-StopLoss*Point,Digits) ;
bool modify=OrderModify(ticket,OrderOpenPrice(),SL,0,0) ;
}
}
}
sinon si(Bid<ima)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,",Magic,0,Red) ;
si(ticket>0)
{
TP=NormalizeDouble(Bid-TakeProfit*Point,Digits) ;
bool modify1=OrderModify(ticket,OrderOpenPrice(),0,TP,0)
{
SL=NormalizeDouble(Bid+StopLoss*Point,Digits) ;
bool modify=OrderModify(ticket,OrderOpenPrice(),SL,0,0) ;
}
}
}
sinon
{
int order_type=FindLastOrderType() ;
if(order_type==OP_BUY)
{
prix=FindLastPrice(OP_BUY) ;
si(Ask<=price-Step*Point)
{
lastlot = FindLastLots(OP_BUY) ;
lastlot = NormalizeDouble(lastlot * Multiplier, 2) ;
ticket=OrderSend(Symbol(),OP_BUY,lastlot,Ask,Slippage,0,0,",Magic,0,Blue) ;
si(ticket>0)
Modifier les ordres (OP_BUY) ;
}
}
autre if(order_type==OP_SELL)
{
prix=FindLastPrice(OP_SELL) ;
si(Bid<=price+Step*Point)
{
lastlot=FindLastLots(OP_SELL) ;
}
lastlot=NormalizeDouble(lastlot*Multiplicateur,2) ;
ticket=OrderSend(Symbol(),OP_SELL,lastlot,Bid,Slippage,0,0,",Magic,0,Red) ;
si(ticket>0)
Modifier les commandes (OP_SELL) ;
}
}
}
retour(0) ;
}
Merci d'avance))))
Raison: