J'ai une classe appelée Edge et une classe appelée Vertexclasse d'erreur compilateur C++ n'a pas nommé membre
dans ma classe Edge il y a une référence à une cible appelée Vertex. En Vertex, j'envoie un Edge et j'essaie de changer la cible via le Edge mais j'ai une erreur de compilateur de classe Edge n'a pas de membre nommé target.
mon Edge.h est
#include "Vertex.h"
class Edge
{
public:
Edge *data;
Edge *next;
Vertex *target;
Edge();
Edge(Edge *x);
Edge(Vertex *x);
void print();
};
l'erreur est causée par ce code dans Vertex.cpp
Vertex::Vertex(Edge *x)
{
name = x->target->name;
next = x->target->next;
mark = x->target->mark;
previous = NULL;
next = NULL;
}
l'erreur exacte lorsque je tente de compiler Vertex est
g++ -g -I. -c -o Vertex.o Vertex.cpp
In file included from Vertex.h:3,
from Vertex.cpp:3:
Edge.h:10: error: ISO C++ forbids declaration of ‘Vertex’ with no type
Edge.h:10: error: expected ‘;’ before ‘*’ token
Edge.h:14: error: expected ‘)’ before ‘*’ token
Vertex.cpp: In constructor ‘Vertex::Vertex(Edge*)’:
Vertex.cpp:26: error: ‘class Edge’ has no member named ‘target’
Vertex.cpp:27: error: ‘class Edge’ has no member named ‘target’
Vertex.cpp:28: error: ‘class Edge’ has no member named ‘target’
Si Edge est déclaré dans Edge.cpp, la déclaration ne sera pas disponible pour Vertex.cpp. – Will
Avez-vous inclus Edge.h dans Vertex.cpp? L'erreur peut être "Edge n'a aucun membre nommé cible car le type n'est pas encore défini" en ayant simplement un coup de poignard. – Seth
Si ces fichiers sont inclus l'un dans l'autre, doivent-ils être dans des en-têtes séparés? Des sons comme Vertex et Edge sont étroitement couplés, vous devriez envisager de les conserver dans le même fichier. – Falmarri