Erreurs, bugs, questions - page 2064

 
A100:

L'erreur dans le code utilisateur n'est pas un bug : la méthode InitIndicators(CIndicator *) est manquante.

La lettre s est manquante, mais le message du compilateur est erroné, donc le SD a entrepris de le corriger.

 
fxsaber:

Les SD se sont chargés de le réparer.

On ne peut pas réparer quelque chose qui ne contient pas d'erreur. Regardez dans le fichier <Indicator.mqh> - il y aura la classe CIndicator sans la lettre s
 
A100:
Vous ne pouvez pas réparer quelque chose qui ne contient pas d'erreur. Regardez dans le fichier <Indicator.mqh> - il y aura la classe CIndicator sans la lettre s.

Écrivez au RS à ce sujet. Ils affirment (pas moi) qu'il y a une erreur et qu'elle sera corrigée.

 
fxsaber:

Écrivez au RS à ce sujet. Ils affirment (pas moi) qu'il y a un bogue et qu'il sera corrigé.

Vous avez indiqué le bug à l'origine - pouvez-vous expliquer ce que c'est ? Quel est le problème ? Voici le code simplifié :

class A1 {}; //Indicators
class A2 {}; //Indicator
class BB {
public:
    void f( A1 * ) {}
};
class B : public BB {
public:
    void f( A1 * ) {}
};
void OnStart()
{
    A2* a;
    B b;   
    b.f( a ); //error: 'f' - no one of the overloads can be applied to the function call
}
 
fxsaber:

Écrivez au RS à ce sujet. Ils affirment (pas moi) qu'il y a une erreur et qu'elle sera corrigée.

Lemessage d' erreurdu compilateur n'est pas tout à fait correct.

Le compilateur traite la méthode virtuelle override comme une surcharge, nous allons corriger cela.
 
Est-ce le message correct du compilateur?
int Tmp = 2;
  
if (Tmp % 2) // expression not boolean
 

C'est un bug ?

// Добавление элемента в конец произвольного массива
template <typename T>
void AddArrayElement( T &Array[], T Value, const int Reserve = 0 )
{
  const int Size = ArraySize(Array);
  
  ArrayResize(Array, Size + 1, Reserve);
  
  Array[Size] = Value;
}

class A {};
class B : public A {};

void OnStart()
{
  A* Array[];
  
  A* a = new B; // no problem
  AddArrayElement(Array, (A*)(new B)); // no problem
  
  AddArrayElement(Array, new B); // template parameter ambiguous, could be 'A*' or 'B*'
}
 

Comment connaître le nom d'un fichier à partir de son identifiant ?

 
Limite de la langue ou de la syntaxe ?
struct A
{
  int i;
};

struct B
{
  const A a;
  
  B() : a({0}) // 'a' - constructor not defined
  {
    const A b = {0}; // no problem
  }  
};
 
Situation comique
class B;

class A
{
protected:  
  int i;

public:  
  void operator =( const B* Value )
  {    
    this.i = Value.i;       // 'i' - protected member access error
    
    // А так можно!
    this.i = ((A*)Value).i; // и нет ошибки: cannot convert from const pointer to nonconst pointer    
  }
};

class B : public A {};


Je pensais que la situation serait la même dans les deux cas. Mais non !