Fehler, Irrtümer, Fragen - Seite 1615

 
Hallo zusammen. Gibt es eine Möglichkeit, ein Konto erneut anzumelden, wenn die Verbindung zum MT5-Server unterbrochen wird?
 

Kompilierungsfehler:

class A
{ 
};

template<typename T>  void func(T *const &a[])  { } 


void OnStart()
  {
    A *const a[] = { NULL };
    func(a);      //  'a' - cannot convert from const pointer to nonconst pointer
  }
 

Hier sind noch ein paar weitere Fehler:

template<typename T> void F(T)
{
  class A
  {
    void f()  { new A; }  // 'A' - declaration without type
        
    void g()  { A* a; }   // 'A' - pointer to this function type is not supported yet
  };
};


void OnStart()
  {
    F(0);
  }
 

Und auch mit der Zeigerumwandlung stimmt etwas nicht.

Der folgende Code lässt sich nicht kompilieren:

class A
{
};

class B : protected A
{
};

void OnStart()
  {
    A* a;
    B* b= (B*)a;  // conversion from 'B *' to 'A *' is not accessible because of inheritance access
  }

obwohl die Umwandlung hier explizit ist. Alles funktioniert in C++.

 
Alexey Navoykov:

Und es ist auch etwas faul, wenn man die Wegweiser einführt.

Das stimmt, der Compiler schwört.
 
Комбинатор:
Es ist richtig, der Compiler kämpft.
Öffnen Sie C++ und prüfen Sie, wie es sein sollte.
 
Alexey Navoykov:
Lesen Sie über dynamic_cast, static_cast und reinterpret_cast und darüber, wann man sie richtig verwendet und wann nicht.
 
Комбинатор:
Lesen Sie mehr über dynamic_cast, static_cast und reinterpret_cast und darüber, wann man sie richtig verwendet und wann nicht.
Lassen Sie uns unnötige Überschwemmungen und Philosophie vermeiden, OK? Wir sprechen über ein bestimmtes Konstrukt, das kompiliert werden sollte.
 
Alexey Navoykov:

C++ wandelt diesen Code in reinterpret_cast und MQL in dynamic_cast um. Und soweit ich weiß, ist dies genau der Fall, wenn der Compiler während der Kompilierung einen Dynamiccast-Fehler finden kann.

reinterpret_cast ist in diesem Fall unzulässig, so dass die Tatsache, dass dieser Code in C++ kompilierbar ist, kein Argument darstellt.

 
Комбинатор:

C++ wandelt diesen Code in reinterpret_cast und MQL in dynamic_cast um. Und soweit ich weiß, ist dies genau der Fall, wenn der Compiler während der Kompilierung einen Dynamiccast-Fehler finden kann.

Reinterpret_cast ist in diesem Fall unzulässig, so dass die Tatsache, dass dieser Code in C++ kompilierbar ist, kein Argument darstellt.

Moment, warum verwechseln Sie das? Was hat dynamically cast damit zu tun? Es gehört nicht zu den Aufgaben des Compilers, Sherlock Holmes zu spielen und etwas in der Programmlogik zu suchen. Er führt nur eine formale Prüfung der Übereinstimmung mit dem Sprachstandard durch, mehr nicht. Und vom Standpunkt des Standards aus ist alles korrekt.

Wenn Sie sich mein Beispiel genau angesehen hätten, wäre Ihnen aufgefallen, dass das Problem mit protected zusammenhängt. Wenn Sie es auf public ändern, ist alles in Ordnung. Das Objekt selbst wird dadurch nicht verändert, d.h. der MQL-Compiler hat nur eine unnötige Einschränkung, das ist alles.

Spekulieren Sie also nicht und suchen Sie nicht nach einer geheimen Bedeutung, wo es keine gibt, sondern nur nach einem trivialen Compilerfehler.