Erreur: '...' n'est pas le nom d'un type de
J'avais un projet de travail. Après avoir réaménagé un peu de code, j'ai essayé de recompiler mon projet et puis bizarre, tout a commencé. Regardez cet extrait de l'compilateur de sortie. Je suis la compilation à partir d'Eclipse sous Windows avec MinGW G++.
**** Build of configuration Debug for project Pract2 ****
**** Internal Builder is used for build ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -omove.o ..\move.cpp
In file included from ..\/game.h:11:0,
from ..\/piece.h:10,
from ..\/move.h:10,
from ..\move.cpp:7:
..\/board.h:18:2: error: 'Piece' does not name a type
conseil d'administration.h, ligne 18:
Piece* GetPieceAt(int row, int col) const;
Généralement quand ça arrive, j'ai juste à ajouter quelques inclusions j'ai oublié de le faire. Mais en fait j'ai compris pièce.h en haut de conseil d'administration.h.
Ma deuxième pensée a été que le compilateur doit avoir généré une erreur quelque part dans le Piece
classe qui serait la cause de la compilateur ignorer l'existence de la classe, ce qui en retour pourrait provoquer des erreurs. Dans ce cas, je regarderais la première erreur du compilateur, qui je devrait être quelque chose à propos d'une erreur dans piece.cpp ou pièce.h. Mais la première erreur, ce n'est pas Piece
à tous, alors j'ai regardé si l'Éclipse avait marqué les erreurs dans piece.cpp ou pièce.h. Non, pas une ligne rouge dans la vue. J'ai seulement vu quelques-uns de ces inexpliquée de marqueurs jaunes.
Une dernière chose que j'ai vérifié, c'est que chaque fichier d'en-tête figurant à l'inclusion des gardes, ce qu'ils firent.
Comment puis-je obtenir vers le bas de cette erreur? J'ai poster des extraits de code, mais alors je serais probablement jusqu'à la fin de coller tout le code (que je ne peut pas le faire) parce que le contexte additionnel peut être nécessaire.
Modifier: voici conseil d'administration.h jusqu'à la ligne 18. (J'ai laissé de côté un grand commentaire, ce qui explique pourquoi ce bloc de code est plus petit que ce que vous attendez.)
#ifndef BOARD_H_
#define BOARD_H_
#include "piece.h"
class Board {
public:
//Prototypes for externally defined functions
Board();
~Board();
void PrintBoard();
Piece* GetPieceAt(int row, int col) const;
- Au moins post-tête pour le conseil.h jusqu'à la ligne 18 si la réponse ci-dessous par AndreyT n'aide pas
Vous devez vous connecter pour publier un commentaire.
Le plus probable par "réorganiser votre code", vous avez créé une inclusion circulaire entre
board.h
etpiece.h
. Vos fichiers d'en-tête contiennent inclure des gardes qui empêchent l'infini de l'inclusion dans de tels cas, mais qui n'aidera pas les déclarations de compiler.Vérifier la circulaire de l'inclusion et de repenser vous inclusion de la stratégie en conséquence. Si vous n'avez pas de dépendances circulaires entre les types, vous devriez être en mesure d'éliminer l'inclusion circulaire facilement. Si vous avez de la circulaire de dépendance entre les types, vous devrez recourir à l'avant déclarations pour certains types. La tentative d'inclure les fichiers d'en-tête dans la circulaire de la mode ne sera pas obtenir quoi que ce soit.
class Piece;
au-dessus de cette ligne dansboard.h
pourrait le réparer.Board
comprendPiece
, qui comprendGame
, qui comprendBoard
et qui se poursuit à l'infini.Il semble que la pièce.h et le conseil d'administration.h sont inclus les uns et les autres.
Si c'est le cas, essayez d'utiliser predeclarations des deux catégories et inclure les en-têtes uniquement dans les fichiers cpp