Fehler, Irrtümer, Fragen - Seite 2327

 
Alexey Navoykov:

Warum hat MQL den Fehler nicht behoben, dass eine Basisklasse implizit in eine abgeleitete Klasse gecastet wird? Nicht einmal eine Compilerwarnung!

Es muss an diesem korrekten Konstrukt liegen

class A {  };

class B : public A { };

A* a;

B* b= a;  // Нет ошибки

wurde nicht berücksichtigt.

 
fxsaber:

Wahrscheinlich wegen dieses korrekten Designs

hat das Ihre nicht berücksichtigt.

Dies ist genau die gleiche falsche Konstruktion.
 
Alexey Navoykov:
Es handelt sich um genau dieselbe falsche Konstruktion.

Wenn sich hinter einem Zeiger auf eine Basisklasse ein Objekt einer abgeleiteten Klasse befindet, ist das eine großartige Konstruktion.

 
fxsaber:

Wenn sich hinter dem Zeiger auf die Basisklasse ein Objekt einer abgeleiteten Klasse befindet, ist dies ein großartiges Design.

Ich schlage vor, dass Sie sich nicht streiten und mir einfach glauben, dass dies ein Fehler ist.
 
Alexey Navoykov:
Ich schlage vor, dass Sie sich nicht streiten, sondern mir einfach glauben, dass es ein Fehler ist.

Dieses Verb ist in einem technischen Forum nur bedingt anwendbar. Ich habe C++ ausprobiert.

class A {  };

class B : public A { };

A* a = new B;

B* b= dynamic_cast<B*>(a); // cannot dynamic_cast ‘a’ (of type ‘class A*’) to type ‘class B*’ (source type is not polymorphic)
B* b1= a; // invalid conversion from ‘A*’ to ‘B*’ [-fpermissive]

Keine der Optionen hat funktioniert. Die Gründe dafür sind nicht klar.

 
Koldun Zloy:

Wenn man sie austauschbar macht, dann sind sie beide einfach überflüssig.

In C++ ist dies möglich:

Ich habe die einfachste Variante vorgeschlagen, die schon morgen (nicht erst in 10 Jahren) implementiert werden könnte und äußerlich Ähnlichkeit mit C++ hätte (warum sollte man sonst überhaupt etwas ändern). Wenn operator*() nicht implementiert ist und auch nicht implementiert werden wird (es gab Informationen darüber im Forum), ist es außerdem unklar, warum operator->() plötzlich implementiert werden sollte (sie haben die gleiche Reihenfolge).

 
Alexey Navoykov:

Warum hat MQL den Fehler nicht behoben, dass eine Basisklasse implizit in eine abgeleitete Klasse gecastet wird? Nicht einmal eine Compilerwarnung!

Warten Sie auf einen Kompilierungsfehler? Es sollte keinen geben, denn in diesem Fall ist es dynamic_cast
 
TheXpert:
Warten Sie auf einen Kompilierungsfehler? Es sollte keinen geben, denn in diesem Fall ist es dynamic_cast
Siehe oben, fxsaber hat den C++-Code zur Verfügung gestellt.
 
Alexey Navoykov:
Siehe oben, fxsaber hat den C++-Code zur Verfügung gestellt.

zusammengestellt von

class A 
{ 
public:
    virtual ~A() = default; 
};

class B : public A { };

int main(void)
{
    A* a = new B;
    B* b= dynamic_cast<B*>(a);
    return 0;
}
 
TheXpert:

zusammengestellt von

Sie passen nicht auf.
Grund der Beschwerde: