Fehler, Irrtümer, Fragen - Seite 1416

 
Wann tritt der "Interne Compilerfehler" auf?  
Ilyas:
Bislang sind uns zwei Fälle bekannt:
1) In der Operation bool &= (boolscher Ausdruck)
2) Unnötiges Komma in Initialisierungssequenzen: val={ {...},{...}, }.

Sind diese Fehler in der neuen Build immer noch nicht behoben? Mein Compiler erzeugt immer noch einen Fehler, ich muss bei der 1159er Build bleiben.

 
Renat Fatkhullin:
Die Anforderung an Vorlagen ist, alle Methoden innerhalb der Klassenbeschreibung zu platzieren, ohne Körper außerhalb zu platzieren.

Ich sehe, die Hauptsache ist, diese Anforderung zu halten, weil gerade erstellt Stapel und Warteschlange Container und einen Monat später Klasse Vorlagen erschienen, und alles sollte besser mit ihnen arbeiten :)

Eine weitere Frage betrifft Klassenvorlagen. Es gibt zwei Vorlagenklassen, eine der Klassen verwendet eine andere. Gibt es einen Typentransfer von einer Vorlagenklasse zur anderen oder nicht?

 
coderex:

Ich sehe, die Hauptsache ist, diese Anforderung zu halten, weil gerade erstellt Stapel und Warteschlange Container und einen Monat später Klasse Vorlagen erschienen, und alles sollte besser mit ihnen arbeiten :)

Eine weitere Frage betrifft Klassenvorlagen. Es gibt zwei Vorlagenklassen, eine der Klassen verwendet eine andere. Gibt es einen Typentransfer von einer Vorlagenklasse zur anderen oder nicht?

Versuchen Sie es.
 
Renat Fatkhullin:
Versuchen Sie es.
Ich versuche es und erhalte ein paar Fehler, denke an einen anderen Weg, es zu tun...
 

Ilyas:
На сегодня известно о двух случаях:
1) в операции bool &= (bool expression)
2) Лишняя запятая в инициализирующих последовательностях: val={ {...},{...}, }

Alexey Navoykov:
Sind diese Fehler im neuen Build nicht behoben? Mein Compiler gibt immer noch einen Fehler aus, ich muss auf dem Build 1159 bleiben.

Habe es vorsichtshalber mit extra Komma in S.2 in MT4 890 geprüft - gibt nur Fehlermeldung.
 

Hat jemand eine CList-Sortierung durchgeführt?

Im Grunde müssen wir Compare außer Kraft setzen.

Aber die ganze Zeit rufe ich Compare der Basisklasse auf. Aber es funktioniert nicht, ich frage mich, was hier los ist...

Ich habe ein einfaches Beispiel gemacht:

class COperation : public CObject
  {
public:
   double           number;
   COperation(double p) { number = p;}

virtual int Compare(const CObject *node,const int mode=0);
  };
  
 int COperation::Compare(const CObject *node,const int mode=0)
  {
   const COperation *ppp = node;
   
   if(this.number > ppp.number)
     {
      return 1;
     }
   if(this.number < ppp.number)
     {
       return -1;
     }
   
  return 0;
 }   


void OnStart()
  {
   CList *list = new CList();
   list.Add(new COperation(3));
   list.Add(new COperation(4));
   list.Add(new COperation(7));
   list.Add(new COperation(2));
   list.Add(new COperation(3));
   list.Add(new COperation(9));
   list.Add(new COperation(0));
   list.Add(new COperation(1));
   
   Print("After Sort");
   COperation *node = list.GetFirstNode();
   string numbers = "";
   for(;node != NULL; node = node.Next())
     {
      numbers += (string)node.number + " ";
     }
    Print(numbers); 
    numbers = "";
     
   list.Sort(0);
   
   Print("Before Sort");
   node = list.GetFirstNode();
   for(;node != NULL; node = node.Next())
     {
      numbers += (string)node.number + " ";
     }
   Print(numbers); 
   
   
   delete list;
  }
Dateien:
sort.mq5  3 kb
 

Bei der Verarbeitung von verschachtelten Vorlagen (MQL4) sehe ich Probleme bei der Typübergabe - hat das jemand bemerkt?

Insbesondere gibt es eine Klasse A mit einer Template-Methode, innerhalb derer ein Objekt einer anderen Klasse B durch einen Template-Konstruktor mit demselben Typ T, mit dem die Methode initialisiert wurde, erzeugt wird. Dies hat zur Folge, dass innerhalb dieser Methode der Typename den übergebenen Typ korrekt definiert, z. B. als int, aber innerhalb des B-Konstruktors ist der Typename bereits string.

SD?

 
Die orthodoxe Art, das Blatt zu sortieren, besteht darin, es in ein Array zu überladen, das Array zu sortieren und es wieder zu überladen.
 

Ich verwende die Sortierung ständig - ohne Probleme.

Sie,sigma7i, haben die Methode Coperation::Compare() fälschlicherweise überschrieben, sie gibt den falschen Wertetyp zurück, den die Basismethode CObject::Compare() zurückgibt, und der Compiler betrachtet sie als separat, nicht virtuell. Als Ergebnis wird nur die Basismethode in Ihren Objekten aufgerufen, der Compiler glaubt, dass es keinen Nachkommen gibt...

 
sigma7i:

Aber die ganze Zeit ruft es Compare der Basisklasse auf. Aber es funktioniert nicht, also denke ich, dass etwas nicht stimmt...

virtual int Compare(const CObject *node,const int mode=0) const;