2011-06-04 4 views
2

J'ai essayé de passer un objet dans une fonction qui appartient à une classe les deux classes sont dans leurs propres fichiers ... mais quand j'essaie de passer l'objet comme argument pour le prototype de fonction il donne moi une erreur disant que l'objet n'existe pas ... mal fournir un code pseudo pour démontrer mon problèmeErreur de fichier multiple C++

//class 1 .h 
class Class1 
{ 
    public: 
    void function(Class2);//this is were one of my errors 
}; 



//class 1 .cpp 
void Class1::function(Class2 object)//another error 
{ 
//stuff happens 
} 


//main.cpp 
//then i simply call these functions like this 

Class1 object; 
Class2 object2; 


int main() 
{ 


    object.function1(object2); 
    return 0; 
} 

et je reçois des erreurs « Class2' n'a pas été déclarée »
et les erreurs sur les prototypes Class1-t ne correspond à aucune classe .... si quelqu'un pouvait expliquer ce que je fais mal ce serait une aide précieuse aussi si plus de code est nécessaire il suffit de demander et je l'afficherai.
EDIT

quand je tentais d'inclure tête class2`s dans la classe que j'utilisais le mauvais directeur comme je l'ai oublié que je l'avais séparé .h fichiers dans leur propre dossier de toute façon maintenant j'ai fixé que tout travail merci beaucoup tout le monde.

+1

Où êtes-vous définissez class2? – TarunG

Répondre

3

Vous devrez inclure le fichier d'en-tête de Classe2 dans Class1.h. C'est:

////////////////// 
//Class1.h 

#include "Class2.h" 

class Class1 
{ 
public: 
    void function(Class2 arg); 
}; 

Si vous utilisez uniquement un pointeur vers Classe2 comme argument, vous pouvez avant de déclarer Classe2 au lieu d'inclure l'en-tête, qui est la suivante:

////////////////// 
//Class1.h 

//Forward declare Class2 so the compiler knows the name exists 
class Class2; 

class Class1 
{ 
public: 
    void function(Class2 *arg); 
}; 

Il y a un peu plus info here si vous êtes intéressé.

+0

Ah bonne prise. Je supposais qu'il avait Class2 dans les fichiers Class1.h & .cpp. –

+0

merci pour votre aide tout cela fonctionne maintenant: D +1 et accepté la réponse –

0

Avez-vous déjà essayé de le faire?

main.cpp:


#include "class1.h" 
... 
int main() 
{ 
    Class1 object; 
    Class2 object2; 

    object.function1(object2); 
    return 0; 
} 

L'astuce consiste à utiliser le #include "class1.h" en haut de votre fichier main.cpp

+0

O ouais j'ai oublié d'ajouter le code dans l'exemple ... mais oui c'était là :) –

3

Eh bien, en fait, la classe 2 n'a pas été déclarée!

Ainsi,

// Class2.h: 
class Class2 
{ 

}; 

// Class1.h: 
#include "Class2.h" 

class Class1 
{ 
    public: 
    void function(Class2 object); 
}; 

// Class1.cpp: 
#include "Class1.h" 
void Class1::function(Class2 object) 
{ 
    //stuff happens 
} 

// main.cpp: 
#include "Class1.h" 
Class1 object; 
Class2 object2; 

int main() 
{ 
    object.function1(object2); 
    return 0; 
} 
+0

+1 qui était mon erreur exacte –

+0

Merci :) Heureux que cela vous a aidé. –