Fehler, Irrtümer, Fragen - Seite 1417

 

A100:

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


Sie haben Recht. Kurz und klar, ohne unnötige Worte. Ich habe einen funktionierenden Code veröffentlicht.

Dateien:
sort.mq5  3 kb
 
Stanislav Korotky:

Dies hat zur Folge, dass innerhalb dieser Methode typename den übergebenen Typ korrekt definiert, z.B. als int, aber innerhalb des B-Konstruktors ist typename bereits gleich string.

Das Ergebnis von typename ist immer vom Typ string, d.h. typename kann konventionell als Funktion dargestellt werden
string typename( X );
 
A100:
das Ergebnis von typename ist immer vom Typ string, mit anderen Worten
Das ist nicht das, was ich meine. typename gibt eine Zeichenkette zurück, die den Typnamen enthält. In einer Methode einer Vorlagenklasse ist der String mit dem Typ "int", und im Konstruktor, der von dort aufgerufen wird, enthält der String "string".
 
Stanislav Korotky:
Das ist nicht das, was ich meine. typename gibt eine Zeichenkette mit dem Typnamen zurück. In der Methode der Vorlagenklasse ist der String vom Typ "int", und im Konstruktor, der von dort aus aufgerufen wird, enthält der String "string".
class A { public:
template<typename T>
        A( T ) { Print( typename( T )); }
};
class B { public:
template<typename T>
        void f( T t ) { A a( t ); } //вызываем A::A(...)
};
void OnStart()
{
        B b;
        int i = 0;
        b.f( i );
}
Ergebnis: int
 

Der Compiler meldet keinen Fehler, wenn #endif fehlt

#property library
#ifndef  MACRO
#define  MACRO

Vorzugsweise sollte dies der Fall sein, da sonst schwer zu findende Fehler
 
A100:
Ergebnis: int.
Ja, dieses minimale Beispiel funktioniert wie es sollte, aber der komplexere Quellcode nicht. Ich habe es in SD geschrieben.
 
CoderMQ4:

Leute, ist das ein Marktfehler oder ist das völlig normal?


Ich habe es nicht ausprobiert, aber es sollte nicht funktionieren, wenn es an die Hardware und nicht an das Betriebssystem gebunden ist. Das ist so, als würde man die Festplatte ausbauen und in ein anderes Motherboard mit einem anderen Video einbauen. Wir werden sofort mit der Suche nach neuen Fahrern beginnen.

Oder habe ich die virtuelle Maschine falsch verstanden?

 

Ein Aufruf einer virtuellen Funktion in einer Instanz einer abgeleiteten Klasse führt zu einem Aufruf dieser Funktion von der Basisklasse, nicht von der abgeleiteten Klasse.

 
Ilya Malev:

Ein Aufruf einer virtuellen Funktion in einer Instanz einer abgeleiteten Klasse führt zu einem Aufruf dieser Funktion von der Basisklasse, nicht von der abgeleiteten Klasse.

Dies ist im Konstruktor immer der Fall. Und warum? -> google C++ (fügen Sie das Wort constructor in den Abfrage-String ein)
 
A100:
Das tun sie immer im Konstruktor. Und warum? -> google C++ (fügen Sie das Wort constructor in den Abfrage-String ein)

Danke, das wusste ich nicht. Es wäre gut, es in die MQL5-Referenz aufzunehmen, Sie wissen schon, wo virtuelle Funktionen und Konstruktoren erwähnt werden. Das ist nicht in allen Sprachen so.

Grund der Beschwerde: