2009-05-15 4 views
0

Je suis en train de déclarer une méthode dans main.h comme ceci:Le passage d'une classe ** comme argument

void buildGraph(int gNum, Graph** gArray); 

Où Graph est une classe et je suis en train de passer un pointeur vers un tableau de pointeurs vers des objets Graph.

Je reçois le message d'erreur: "Le graphique n'a pas été déclaré". Même si j'ai #include "graph.h" en haut de la page et que j'utilise la classe de graphes jusqu'à présent, je sais que cela fonctionne.

Des idées?

+0

Il n'y a pas de problème avec cette déclaration de fonction. Le problème devrait être sth else, pouvez-vous poster le code entier? Et êtes-vous sûr que Graph n'est pas dans un espace de noms? – mentat

Répondre

0

Peut-être que le nom Graph est dans un espace de noms? Que dit ce fichier graph.h - Graph est-il au niveau supérieur, ou à l'intérieur d'une déclaration d'espace de noms?

+0

mon graph.h commence comme ceci // # include "main.h" #include #include using namespace std; classe Graphique { privé: \t int maxVal; \t Vlist vertList; \t Elist edgeList; public: Est-ce ce que vous vouliez dire en étant dans l'espace de noms? Devrais-je éviter d'utiliser un espace de noms comme ça? Ne l'utilise pas signifie que je dois utiliser std :: avant chaque fonction standard? De toute façon, comme je copiais le texte à mettre ici, j'ai remarqué que le problème était que j'incluais main.h dans mon fichier graph.h. Problème résolu. Merci! – Meir

+1

Non, ici vous faites tout le contenu de std :: visible sans utiliser le préfixe std ::. Alex voulait dire que vous pouviez avoir comme ceci: namespace MyNamespace {class Graph {}; } – sharptooth

+0

J'évite normalement "using namespace foo;" parce que cela peut devenir confus pour le lecteur ou le mainteneur du code, mais, de tous les espaces de noms, std est celui qu'il peut être logique d'utiliser de cette façon. –

3

Il est probable que vous avez plus d'un fichier graph.h dans le système de fichiers et le mauvais est inclus. Si c'est à cause de la copie accidentelle, supprimez les copies inutiles, si c'est à cause d'une collision avec la bibliothèque standart C++ ou d'autres en-têtes de bibliothèques, vous devez renommer vos fichiers d'en-tête pour éviter de futures collisions.

1

Une possibilité d'inclusion incorrecte dans Graph.h est une possibilité d'inclusion incorrecte, probablement un reste d'un autre fichier d'en-tête que vous utilisez.

C'est, assurez-vous que le « #ifndef GRAPH_H » ligne -comme vous êtes censé avoir dans Graph.h est vraiment ce qu'il est censé être ...

(mais vraiment, sans plus d'informations répondant cette question est ... difficile).

Questions connexes