'[Nom de la classe]' n'est pas le nom d'un type en C++
Je suis de la programmation d'un graphe à l'aide d'une liste de listes. Pour cela, j'ai deux classes, et chaque un de ces classes dispose d'un pointeur à un autre objet de la même classe et un pointeur vers l'objet de la deuxième classe. Voici le code:
Fichier V. h:
#ifndef VERTICEPUNT_H
#define VERTICEPUNT_H
#include "A.cpp"
typedef char E;
class V
{
public:
E etiqueta;
V* siguiente;
A* primera; //<- Error: 'A' does not name a type
V();
~V();
};
#endif //VERTICEPUNT_H
Fichier V.cpp:
#include "V.h"
V::V()
{
etiqueta = ' ';
siguiente = 0;
primera = 0; //<- Error: 'primera' was not declared in this scope
}
V::~V()
{
delete primera;
delete siguiente;
}
Fichier A. h:
#ifndef ARISTAPUNT_H
#define ARISTAPUNT_H
#include "V.cpp"
typedef int P;
class A
{
public:
P peso;
V* vertice;
A* siguiente;
A();
~A();
};
#endif //ARISTAPUNT_H
A.cpp:
#include "A.h"
A::A() //<- Error: 'A' does not name a type
{
peso = 0;
siguiente = 0;
vertice = 0;
}
A::~A() //<- Error: 'A' does not name a type
{
delete siguiente;
}
Comment pourrais-je résoudre ce problème?
OriginalL'auteur J-orge Mata Villalobos | 2013-06-27
Vous devez vous connecter pour publier un commentaire.
Le message signifie que le nom de la classe n'est pas dans la portée.
V.h
ne devrait pas inclureA.cpp
, il devrait inclureA.h
. En va de même pourA.h
inclusion deV.cpp
.En général, vous ne voulez
#include
un fichier CPP - à partir d'un en-tête ou à partir d'un autre fichier CPP. Seulement.h
fichiers d'en-tête sont conçus pour l'inclusion par le préprocesseur.Dans le cas des définitions circulaires comme ceci, de l'avant-déclaration de la classe le pointeur à laquelle vous définissez, et renoncer à l'inclusion de cette classe d'en-tête:
Vous avez le même problème dans les deux fichiers, si vous avez besoin de mettre en œuvre un changement similaire dans les deux endroits.
OriginalL'auteur dasblinkenlight