Alors voilà, je me retrouve avec une erreur redoutable : j’inclue un header contenant une classe, et lorsque je veux utiliser la classe en question : le compilateur me dit que l'objet n'est pas défini !
Voici le code source (j'ai supprimé tout ce qui ne servait à rien : les méthodes/fonctions/variables inutiles). Dans un premier essai la compilation fonctionne correctement.
Mais c'est lorsque j’inclue "Tank.h" (ou "TankFILS.h") dans le fichier "Boulet.h", que l'erreur apparaît.
Voici le code source pour plus de précision :
main.cpp :
#include <SFML/Graphics.hpp>
#include <iostream>
#include "TankFILS.h"
#include "Tank.h"
#include "Boulet.h"
#include <vector>
using namespace sf;
using namespace std;
int main()
{return 0;}
Voici le "Build log" (en ayant inclu "TankFILS.h" :
-------------- Build: Release in Mini Tank (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -Wall -DSFML_DYNAMIC -O2 -I"C:\Program Files (x86)\CodeBlocks\SFML\include" -I"C:\Program Files (x86)\CodeBlocks\SFML\include" -c "D:\Programme\PC\Programmation\Langage C++\Mini Tanks\TEST\Boulet.cpp" -o obj\Release\Boulet.o
In file included from D:\Programme\PC\Programmation\Langage C++\Mini Tanks\TEST\TankFILS.h:3:0,
from D:\Programme\PC\Programmation\Langage C++\Mini Tanks\TEST\Boulet.h:5,
from D:\Programme\PC\Programmation\Langage C++\Mini Tanks\TEST\Boulet.cpp:1:
D:\Programme\PC\Programmation\Langage C++\Mini Tanks\TEST\Tank.h:10:47: error: 'Boulet' has not been declared
D:\Programme\PC\Programmation\Langage C++\Mini Tanks\TEST\Tank.h:13:5: error: 'Boulet' does not name a type
In file included from D:\Programme\PC\Programmation\Langage C++\Mini Tanks\TEST\Boulet.h:5:0,
from D:\Programme\PC\Programmation\Langage C++\Mini Tanks\TEST\Boulet.cpp:1:
D:\Programme\PC\Programmation\Langage C++\Mini Tanks\TEST\TankFILS.h:9:46: error: 'Boulet' has not been declared
D:\Programme\PC\Programmation\Langage C++\Mini Tanks\TEST\TankFILS.h:17:49: error: 'Boulet' has not been declared
D:\Programme\PC\Programmation\Langage C++\Mini Tanks\TEST\Boulet.cpp: In function 'std::vector<float> tableauRemoveCases(std::vector<float>, int)':
D:\Programme\PC\Programmation\Langage C++\Mini Tanks\TEST\Boulet.cpp:12:1: warning: no return statement in function returning non-void [-Wreturn-type]
Process terminated with status 1 (0 minutes, 0 seconds)
4 errors, 1 warnings (0 minutes, 0 seconds)
Tu as un problème d'inclusion croisée. Tu peux corriger en pré-déclarant tes classes :
truc.h
#ifndef _TRUC
#define _TRUC
class Machin;
class Truc{
void fonction(Machin& m);
};
#endif
machin.h
#ifndef _MACHIN
#define _MACHIN
class Truc;
class Machin{
void fonction(Truc& t);
};
#endif
Tous les fichiers header correspondant doivent être (en revanche) inclus dans les fichiers source, sinon on n'a pas connaissance des fonctions disponibles pour chacune des classes.
A noter : ici, c'est possible parce qu'on n'utilise pas de fonctions de la classe pré-déclarée dans le header. Si l'un des deux doit utiliser la fonction, il doit inclure le header de l'autre :
truc.h
#ifndef _TRUC
#define _TRUC
class Machin;
class Truc{
void fonction(Machin& m);
};
#endif
Merci pour les infos et d'avoir pris le temps de résoudre mon problème !
Problème de compilation - inclusion fichier Header
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C