Fehler, Irrtümer, Fragen - Seite 1873

 
Stanislav Korotky:
Haben Sie in den letzten Builds den Fehler behoben, dass das Ändern und Neukompilieren von EA-Code vom Tester nicht erkannt wird? Ich muss das Terminal schließen und wieder öffnen, um die neue Version von ex5 zu testen. Andernfalls wird die alte Variante getestet.
Ich bearbeite den Expert Advisor und sehe entweder mit STRG+F5 oder direkt im Strategy Tester das entsprechende Ergebnis.
 
fxsaber:
Ich bearbeite den Expert Advisor und entweder über CTRL+F5 oder direkt im Tester sehe ich entsprechende Ergebnisse.
Strg+F5 ist Debugging, richtig? Mein Problem liegt nicht in der Fehlersuche, sondern in der Durchführung eines einfachen Tests.
 
Stanislav Korotky:
Strg+F5 ist Debugging, richtig? Mein Problem liegt nicht in der Fehlersuche, sondern in der Durchführung eines einfachen Tests.
Ohne Bildmaterial laufe ich nach Bearbeitungen - gut.
 
fxsaber:

Wie erstelle ich ein verstecktes Klassenobjekt mit einem geschlossenen Konstruktor?

So kommt es zu den undichten Stellen.

Es ist nicht klar, wie man in dieser Situation einen Destruktor aufruft. Singleton ist es nicht.

Ein Klassenobjekt mit einem geschlossenen Konstruktor kann nur mit einer speziellen statischen Funktion dieser Klasse erstellt werden.

Obwohl der Compiler derzeit nicht auf den von Ihnen zitierten Code flucht, wird dies in Zukunft definitiv behoben werden.

Sie können einen Smart Pointer verwenden, um den Destruktor aufzurufen.

Der Destruktor muss offen sein.

 
Koldun Zloy:

Ein Objekt einer Klasse mit geschlossenem Konstruktor kann nur mit einer speziellen statischen Funktion dieser Klasse erstellt werden.

Obwohl der Compiler derzeit nicht auf den von Ihnen zitierten Code flucht, wird dies in Zukunft definitiv behoben werden.

Die vorgeschlagene statische Methode wird in diesem Fall eine Art Selbstbetrug sein, da sie im Wesentlichen ein Konstruktor ist. Sie müssen sie explizit aufrufen.

Sie können einen Smart Pointer verwenden, um den Destruktor aufzurufen.

Der Destruktor muss offen sein.

Was ist ein intelligenter Zeiger?
 

Wenn Sie sicher sind, dass der Konstruktor privat sein soll, gibt es keine andere Möglichkeit.

Ein intelligenter Zeiger ist ein Objekt, das einen einfachen Zeiger enthält und sicherstellt, dass dieser rechtzeitig entfernt wird.

class MyClass
{
public:
   MyClass();
};

struct MyClassPtr
{
   MyClass* pMyClass;

   MyClassPtr( MyClass* myClass ) : pMyClass( myClass )
   {
   }
   ~MyClassPtr()
   {
      delete pMyClass;
   }
};

Dies ist die einfachste Option.

Es gibt auch komplexere intelligente Zeiger.

In diesem Buch wird sehr gut über sie geschrieben: https://rsdn.org/res/book/cpp/cpp_real_programmers.xml

C++ : библиотека программиста
  • rsdn.org
Глава 5. Умные указатели Глава 6. Ведущие указатели и дескрипторы Глава 7. Грани и другие мудрые указатели Глава 8. Коллекции, курсоры, итераторы Глава 9. Транзакции и гениальные указатели
 

was noch fehlt, damit der Code kompiliert werden kann:

class CMyClass
  {
public:
   void* core;
   CMyClass(void) : core(NULL) { }
   template<typename T>
   void Create(T* a_ptr) {
      core = dynamic_cast<T *> (a_ptr);
   }
  };

class CCore
  {
public:
   int var;
   CCore(void) : var(3) { }
  };


int OnInit() {
   CCore *_point_1 = new CCore();
   CMyClass _obj;
   _obj.Create(_point_1);
   int _val = _obj.core.var;
   
   delete _point_1;
//---
   return INIT_SUCCEEDED;
}

diese Variante schreibt 'var' - Strukturmitglied undefiniert

PS. habe den Fehler gefunden ))

int _val = dynamic_cast <CCore *>(_obj.core).var;


 
void* von welchem Build in der Sprache?
 
fxsaber:
void* seit welchem Build in der Sprache?

da tauchten die Schnittstellen auf
 
Sergey Dzyublik:

als die Schnittstellen eintrafen.
Ich danke Ihnen. Ich bin jedoch sofort auf einen Fehler gestoßen
struct PTR
{
  void* Ptr; // internal error #40
};