//--------- 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;}
La principale chose à retenir est que les règles C++ sont conçues pour être compilées de manière séquentielle.
220Volt: Il se compile dans MQL sans erreur, il ne se compile pas dans VS (le programmeur lui indique qu'il ne peut pas utiliser la classe sans définition). Pourquoi ?
VS a raison, bien sûr. La déclaration suffira si vous prenez l'implémentation de la fonction fn2 en dehors de la classe et après la définition de cl2.
Comme la fonction est définie directement dans le corps, une simple déclaration ne fonctionne pas (bien que le passage par référence), car la définition de la cl2 est nécessaire pour que la fonction fonctionne.
Soit un bug, soit une erreur. Il est fort probable qu'il s'agisse de la seconde option, mais il est préférable de clarifier les choses.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Ouais, je suppose que je devrais lui donner un signe plus...)
Bonne illustration de l'inutilité de la question " pourquoi ? ", peut-être y a-t-il d'autres questions ? :)
:) Une idée - existe-t-il un autre moyen de le faire dans VS ? Ou est-ce inutile ?
:) J'ai une idée - peut-être que les VS devraient avoir une façon différente de faire les choses ?
Oui.
oui.
Au fait, ça ne marche pas non plus :
Voici comment cela fonctionne :
Et voilà, les peluches sont enlevées :). Merci.
Non, non, non, non ! Gardez le plus. "MS est nul, MQ est roi !"
Vous pouvez aussi faire comme ça :
La principale chose à retenir est que les règles C++ sont conçues pour être compilées de manière séquentielle.VS a raison, bien sûr. La déclaration suffira si vous prenez l'implémentation de la fonction fn2 en dehors de la classe et après la définition de cl2.
Comme la fonction est définie directement dans le corps, une simple déclaration ne fonctionne pas (bien que le passage par référence), car la définition de la cl2 est nécessaire pour que la fonction fonctionne.
Soit un bug, soit une erreur. Il est fort probable qu'il s'agisse de la seconde option, mais il est préférable de clarifier les choses.