//--------- C++
class cl2;
class cl1
{
public:
int q;
void fn2(cl2 &t);
};
class cl2
{
public:
int i;
void fn(cl1 &w);
};
//-- реализация функций только после полного описания интерфейса - т.е. фиксации размеров классов
//-- теперь компилятор знает сколько именно стека нужно резервировать в функциях под классы
void cl1::fn2(cl2 &t){t.i = 87;}
void cl2::fn(cl1 &w){w.q = 9;}
class cl2;
class cl1
{
public:
int q;
void fn2(cl2 *t);//{t->i = 87;} // здесь реализация не прокатит: ещё неизвестен размер и состав класса cl2
}; // например, откуда последовательному компилятору знать о члене 'i' ?
class cl2
{
public:
int i;
void fn(cl1 *w){w->q = 9;} // размер и состав класса cl1 уже известен на этом этапе. поэтому можно здесь.
};
void cl1::fn2(cl2 *t){t->i = 87;}
//void cl2::fn(cl1 *w){w->q = 9;}
Das Wichtigste ist, dass C++-Regeln für die sequentielle Kompilierung ausgelegt sind.
220Volt: Es kompiliert in MQL ohne Fehler, in VS wird es nicht kompiliert (der Programmierer sagt dem Programmierer, dass er/sie nicht in der Lage ist, die Klasse ohne Definition zu verwenden). Und warum?
VS hat natürlich recht. Die Deklaration reicht aus, wenn Sie die Implementierung der Funktion fn2 außerhalb der Klasse und nach der Definition von cl2 vornehmen.
Da die Funktion direkt im Textkörper definiert ist, funktioniert eine einfache Deklaration nicht (auch wenn sie per Verweis übergeben wird), da eine cl2-Definition erforderlich ist, damit die Funktion funktioniert.
Entweder ein Bug oder ein Fehler. Höchstwahrscheinlich handelt es sich um Letzteres, aber es ist besser, das zu klären.
Ja, ich schätze, ich sollte ein Pluszeichen setzen ))
Ein gutes Beispiel für die Sinnlosigkeit der "Warum?"-Frage, vielleicht gibt es andere Fragen? :)
:) Ein Gedanke - gibt es eine andere Möglichkeit, dies in VS zu tun? Oder ist sie nutzlos?
:) Ich habe eine Idee - vielleicht sollte der VS die Dinge anders angehen?
Ja, ja.
Ja.
Übrigens, auch das funktioniert nicht:
Das funktioniert folgendermaßen:
Na bitte, das Plüschtier ist weg :). Ich danke Ihnen.
Nein, nein, nein, nein! Behalten Sie das Plus: "MS ist scheiße, MQ ist König!"
Sie können auch so vorgehen:
Das Wichtigste ist, dass C++-Regeln für die sequentielle Kompilierung ausgelegt sind.VS hat natürlich recht. Die Deklaration reicht aus, wenn Sie die Implementierung der Funktion fn2 außerhalb der Klasse und nach der Definition von cl2 vornehmen.
Da die Funktion direkt im Textkörper definiert ist, funktioniert eine einfache Deklaration nicht (auch wenn sie per Verweis übergeben wird), da eine cl2-Definition erforderlich ist, damit die Funktion funktioniert.
Entweder ein Bug oder ein Fehler. Höchstwahrscheinlich handelt es sich um Letzteres, aber es ist besser, das zu klären.