Boucle d'inclusion C ++. Impossible d'utiliser les déclarations avant
Aug 28 2020
Je veux faire quelque chose comme ça, à partir de main ():
Main.cpp
#include "A.h"
#include "B.h"
int main(){
A* a = new A();
B* b = new B(a);
b->render();
return 0;
Ah
class B;
class A {
public:
void renderObject(B* b);
}
A.cpp
#include "A.h"
void renderObject(B* b) {
int* data = b->data;
//do something with data
Bh
class A;
class B {
public:
A* a;
B(A* a);
int* data;
void render();
}
B.cpp
#include "B.h"
B(A* a) {
this->a = a;
//something that write stuff to data.
}
void render() {
a->renderObject(this);
}
Ce type de codage est-il possible? Que puis-je faire pour que les deux puissent faire référence aux deux?
Réponses
1 Yunnosch Aug 28 2020 at 13:27
Pour cette ligne dans A.cpp, vous avez besoin de plus que "c'est une classe", les informations fournies par une déclaration forward.
Ie dans ce fichier, vous avez besoin d'un supplément
#include "B.h"
Similaire à B.cpp, il doit inclure Ah pour le code contenu. (Merci, Scheff.)
Et, au moins si vous ne regardez que le code affiché, vous n'avez pas vraiment besoin d'inclure Ah dans A.cpp. Cela change déjà si vous ajoutez les éléments apparemment manquants A::et que le reste du fichier réel en a très probablement besoin.