PLO. Fragen zur Anwendung - Seite 18

 
TheXpert:
Es scheint nicht zu kompilieren.
Es funktioniert :/ Versuchen Sie es. Natürlich habe ich den Entwurf schematisch beschrieben, aber mein ähnlicher Entwurf lässt sich gut kompilieren.
 
Yedelkin:

Die Suche funktioniert nicht. Vielleicht wiederhole ich mich, aber die Frage ist: Kann sich ein Klassenobjekt selbst zerstören? D.h. zuerst erhalten wir einen Verweis des Objekts auf sich selbst in der Klasse Objekt mit dem reservierten Wort this, dann wenden wir den Löschoperator auf den entsprechenden Objektdeskriptor (Zeiger) an.

Etwa so:

Oder ist es besser/vorzuziehen, ein Objekt "extern" statt "intern" zu löschen?

Ich habe mich auch über diese Frage gewundert. Ich bin zu folgendem Schluss gekommen: Das Objekt kann sich selbst (schmerzlos) löschen, aber es muss beachtet werden, dass die Objektdaten (Variablen) danach nicht mehr existieren, also keine Aufrufe an sie. Aber imho ist dies ein schmutziger Weg, besser von außen. Und wenn sich das Objekt selbst löscht, kann es nur in neu erstellt werden.
 
220Volt:
Ich habe mich auch über dieses Thema gewundert. Die Schlussfolgerung ist die folgende: Das Objekt kann sich selbst (schmerzlos) löschen, aber wir müssen bedenken, dass die Objektdaten (Variablen) danach nicht mehr existieren, also keine Aufrufe an sie. Aber imho ist das ein unschöner Weg, besser draußen.
Ja, ich benutze es jetzt seit einem Jahr :) Sehr praktisch, wenn das Objekt nicht mehr benötigt wird. Ich verstehe nicht, warum Sie das als "schmutzige" Methode betrachten?
 
Yedelkin:

Vielleicht sollten Sie zunächst die Dokumentation der Sprache lesen, mit der Sie arbeiten möchten, und sich die Definitionen ansehen, die für die Zwecke dieser Programmiersprache verwendet werden.

Hochachtungsvoll.

Sie denken in die richtige Richtung.

 

Dieser Code lässt sich nicht kompilieren

class CCC
{
   public:
      datetime start;                      //Сохраняем время создания объекта класса ССС
      CCC(void) : start(TimeCurrent()) {};  //Функция TimeCurrent() указана без символа "точка с запятой"
     ~CCC(void)                      {}; 
}
  
void OnTick()
{
   CCC ccc;
}

Das liegt daran, dass das ; in Zeile 7 fehlt, während es in den Zeilen 6 und 5 nicht benötigt wird.

 
kazakov.v:

Sie denken in die richtige Richtung.

Ich vermute, dass Sie die Sprachdokumentation nicht sehr oft lesen :)
 
TheXpert:

Dieser Code lässt sich nicht kompilieren

Das liegt daran, dass das ; in Zeile 7 fehlt, während es in den Zeilen 6 und 5 nicht benötigt wird.

D.h. das Problem beginnt beim Erstellen eines Klassenobjekts? OK, danke, ich werde es jetzt überprüfen.
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5
 
TheXpert:
Es scheint nicht zu kompilieren.
Es wird kompiliert (na ja, ich bin nicht wählerisch, was Semikolons angeht ;-) ).
 
marketeer:
Es kompiliert (na ja, ich bin nicht wählerisch bei Semikolons ;-) ).

Der Fragesteller hat also genau das Problem mit ihnen.

Im Allgemeinen sind es solche Kleinigkeiten...

 
TheXpert:

Dieser Code lässt sich nicht kompilieren

Das liegt daran, dass das ; in Zeile 7 fehlt, während es in den Zeilen 6 und 5 nicht benötigt wird.

Seltsam, alles kompiliert in meinem Code auch nach Ihren zusätzlichen Zeilen mit OnTick(). Nur nach der Deklaration der CCC-Klasse müssen Sie ein Semikolon setzen. Wie Sie geschrieben haben, - müssen Sie in der 7. Zeile ein Semikolon setzen.