Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur de compilation

il ne me trouve pas une classe que j'ai déclarée

Sujet résolu
    3 janvier 2009 à 15:04:22

    Slt, j'ai plusieurs classes, dont une que voila :

    #ifndef CFICHIER_H_
    #define CFICHIER_H_
    
    #include "Types.h"
    #include "CException.h"
    #include "CInode.h"
    
    namespace Projet_SVFS
    {
    	class CFichier
    	{
    	  protected :
    		// Flags d'ouverture du fichier
    		int m_Flags;
    	  public :
    		// ...
    		
    		CInode* m_Inode;
    		
    		AdrBloc_t m_AdrBlocNom;
    		
    		
    		// ...
    	};// CFichier
    }// namepsace Projet_SVFS
    
    #include "CFichier.hxx"
    
    #endif /* CFICHIER_H_ */
    


    et CInode :

    #ifndef CINODE_H_
    
    #define CINODE_H_
    
    
    
    #include <string>
    
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    
    
    #include "Types.h"
    
    #include "CException.h"
    #include "Constantes.h"
    
    
    
    
    
    namespace Projet_SVFS
    
    {
    
    	class CInode
    	{
    
    	  protected:
    
    		AdrBloc_t m_Adr;
    
    		Sentinelle_Bloc_t m_type;
    
    		mode_t m_mode;
    
    		uid_t m_uid;
    
    		gid_t m_gid;
    
    		long int m_size;
    
    		int m_NbLiens;
    
    		time_t m_mtime;
    
    		time_t m_atime;
    
    		time_t m_ctime;
    		AdrBloc_t m_Donnees[NbAdrInode];
    		
    
    		int m_FdD;
    		int m_FdFifoIn;
    		int m_FdFifoOut;
    		int m_FdFifoPere;
    
    	  public:
    
    		
    		CInode (uid_t uid, gid_t gid, Sentinelle_Bloc_t Type, int FdD,
    				int FdFifoIn, int FdFifoOut, int FdFifoPere);
    
    		CInode (AdrBloc_t Adr, int FdD, int FdFifoIn, int FdFifoOut,
    				int FdFifoPere);
    
          
    		//...
    		
    	};// CInode
    
    
    
    } //Projet_SVFS
    
    
    
    #include "CInode.hxx"
    
    
    
    #endif /* CINODE_H_ */
    


    Enfin bref, classique! Hors, quand je compile, il me compile parfaitement CInode mais pour CFichier voici l'erreur :

    In file included from ../include/CTabDescFic.h:23,
                     from ../include/CFilsServeur.h:17,
                     from CBlocAdr.cxx:20:
    ../include/CFichier.h:42: erreur: ISO C++ forbids declaration of ‘CInode’ with no type
    ../include/CFichier.h:42: erreur: expected ‘;’ before ‘*’ token
    ar: CBlocAdr.o: No such file or directory
    make[1]: *** [CBlocAdr.o] Erreur 1
    make[1]: quittant le répertoire « /home/barbug/Bureau/sources/util »
    make: *** [cible] Erreur 2


    Quelqu'un aurait-il une idée d'ou cela pourrait venir ? Sachant que CInode.h est bien inclus...

    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      3 janvier 2009 à 15:15:18

      L'étoile, au lieu de la mettre a coté de CInode, met putot a coté de ton pointeur comme ca :
      CInode *m_Inode;
      
      et non comme ca :
      CInode* m_Inode;
      
      • Partager sur Facebook
      • Partager sur Twitter
        3 janvier 2009 à 15:18:15

        Les deux fonctionnent !

        De plus j'ai essayé de mettre un pointeur au lieu d'un objet car je pensais que le pointeur marcherait mais ce n'est pas le cas !

        Ma déclaration d'avance etait :

        CInode m_Inode;

        Qui ne marchait pas non plus ! Pourtant ils sont dans le même namespace...
        • Partager sur Facebook
        • Partager sur Twitter
          3 janvier 2009 à 15:20:08

          Non les deux techniques fonctionne mais dans mon cas, ça ne marche pas ! (j'ai essayé ta solution au cas où... mais rien...)
          • Partager sur Facebook
          • Partager sur Twitter
            3 janvier 2009 à 15:22:48

            Ta essayer de le mettre dans private et pas dans public ?(sa pourrai ptetre marcher ?!?)
            • Partager sur Facebook
            • Partager sur Twitter
              3 janvier 2009 à 15:23:57

              Oui, déjà essayé ! Marche pas non plus ! Même essayé de renommer le fichier CInode, puis réécris les noms de classe de partout au cas où un caractère non éditable se soit inséré par malheur !
              • Partager sur Facebook
              • Partager sur Twitter
                3 janvier 2009 à 15:30:51

                Je dirais qu'il y a une erreur au niveau des include (inclusion circulaire peut'etre) mais juste avec ces 2 classe je ne voit pas le problème.
                • Partager sur Facebook
                • Partager sur Twitter
                FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
                  3 janvier 2009 à 15:33:22

                  Pourtant j'ai bien mis les #ifndef et #define...

                  Bizare !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 janvier 2009 à 15:41:53

                    Tu peut poster tout tes en-tetes de fichiers ? (les includes en gros, en enlevant les include standard)
                    • Partager sur Facebook
                    • Partager sur Twitter
                    FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
                      3 janvier 2009 à 15:47:50

                      D'ici ça sent l'inclusion croisée non ? (on a vu la meme erreur il y a quelques temps)
                      http://cpp.developpez.com/faq/cpp/?pag [...] rence_croisee
                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 janvier 2009 à 15:57:03

                        Citation : freecircus

                        D'ici ça sent l'inclusion croisée non ? (on a vu la meme erreur il y a quelques temps)
                        http://cpp.developpez.com/faq/cpp/?pag [...] rence_croisee


                        Oui c'est ce que je pense aussi, mais il faudrait l'ensemble des entete pour etre sur :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                        FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
                          3 janvier 2009 à 16:39:59

                          Effectivement, ça a l'air de marcher... Mais comment est-ce possible ?

                          Merci beaucoup beaucoup, vous pouvez pas savoir à quel point vous m'enlevez une épine du pied !
                          • Partager sur Facebook
                          • Partager sur Twitter
                            3 janvier 2009 à 17:36:35

                            Tu as eu ce problème parce que tu as une inclusion circulaire, cad un fichier qui en inclu un qui lui même inclu ce premier fichier. La technique utilisé consiste à dire au compilateur que la classe que tu vas utilisée existera mais quelle n'est pas encore déclaré (parce que tu peus pas le faire a cause des inclusion circulaire)
                            • Partager sur Facebook
                            • Partager sur Twitter
                            FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
                              3 janvier 2009 à 18:19:45

                              D'accord ! Merci encore !

                              A bientôt !
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Erreur de compilation

                              × 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.
                              • Editeur
                              • Markdown