2009-08-15 7 views
1

Définie comme: class.hstruct global ne pas être vu

#ifndef CLASS_H_ 
#define CLASS_H_ 

#include "Class2.h"  
#include <iostream> 

struct Struct1{ 
}; 

struct Struct2{ 
}; 

class Class1 { 
}; 

#endif 

Puis l'autre fichier d'en-tête, où j'utilise ceci:

#ifndef CLASS2_H_ 
#define CLASS2_H_ 

#include "Class.h" 

class Class2 { 
    public: 
     Class2(Struct1* theStruct, Struct2* theStruct2); //Can't find struct definitions 
    private: 
}; 

#endif 

Ce sont dans le même répertoire. Et il ne voit pas ces définitions de structure! Ils ont l'air d'avoir une portée mondiale pour moi. Quelqu'un peut-il m'expliquer pourquoi Class2 ne peut pas les voir? Le compilateur ne se plaint pas de ne pas trouver l'en-tête de Class, donc ça ne peut pas être ça.

+0

Cela ne semble pas être le code entier. Avez-vous essayé ce code exact? Où est «» utilisé? –

+0

Modifié ceux-ci en pointeurs. – Alex

+0

code entier est maintenant inclus – Alex

Répondre

4

Ce qui suit est une estimation de votre code complet. Veuillez le signaler, nous pourrons mieux vous aider.


Si par hasard votre complète code ressemble à ce qui suit, alors vous devriez changer parce que les CLASS_H_ macro

#ifndef CLASS_H_ 
#define CLASS_H_ 

#include <iostream> 
#include "Class2.h" 

struct Struct1{ 
}; 

struct Struct2{ 
}; 

class Class1 { 
}; 

#endif 

sera déjà défini, dans Class2.h l'autre tête ne sera pas inclus une autre fois, et puis à ce moment Struct1 et Struct2 ne serait pas encore connu. Corrigez-le en utilisant une déclaration avant si possible. Par exemple, dans Class2.h:

#ifndef CLASS2_H_ 
#define CLASS2_H_ 

// no need for that file 
// #include "Class.h" 

// forward-declarations suffice  
struct Struct1; 
struct Struct2; 

class Class2 { 
    public: 
     Class2(Struct1 theStruct, Struct2 theStruct2); 
    private: 
}; 

#endif 

Si l'autre en-tête n'a pas besoin de la définition de Class2 soit, utilisez une déclaration avant aussi, là-bas. La définition n'est pas nécessaire pour (soit une déclaration suffit)

  • Références et Pointeurs
  • Paramètres de fonction dans les déclarations de fonctions qui ne sont pas des définitions

Il est nécessaire si vous souhaitez accéder à un membre, voulez obtenir le sizeof ou voulez définir une fonction qui a un type de paramètre de Class2, Struct1 par valeur.

+0

Vous monsieur, sont psychiques. La question est alors, si je voulais stocker un Class2 en classe, comment je le référencerais dans le fichier d'en-tête? – Alex

+0

vous devrez alors inclure l'en-tête :) Mais alors, vous devrez vous débrouiller pour ne pas avoir besoin de l'en-tête de cet autre en-tête puis casser le cercle :) S'il ne peut pas casser, vous devrez utiliser un pointeur allouer l'objet dans le fichier .cpp avec 'new'. Essayez 'shared_ptr' :) –

Questions connexes