2010-11-30 17 views
1

J'ai une classe définie dans un fichier séparé et à un moment donné, j'ai besoin d'accéder à l'une des fonctions membres publiques à partir d'un autre fichier source. Pour une raison quelconque, j'ai oublié comment faire cela et compilateur me donne une erreur.C++: accès à une fonction membre publique depuis l'extérieur d'une classe

J'ai classA.h avec la définition de la classe A semblable à ceci:

class classA { 
    public: 
    int function1(int alpha); 
} 

Et un fichier séparé classA.cpp avec la mise en œuvre. Et puis dans un autre fichier blah.cpp j'inclure l'en-tête et d'essayer d'y accéder comme ceci:

classA::function1(15); 

et mon compilateur, il refuse avec l'erreur qu'il ne pouvait pas trouver une correspondance pour « CLASSA :: function1 (int) '.
J'utilise Embarcadero RAD studio 2010 si c'est important.

Répondre

9

Pour appeler une fonction 'normale', vous avez besoin d'une instance.

classA a; 
a.function1(15); 

Si vous voulez appeler la fonction à l'aide classA:: alors il faut static.

classA { 
    public: 
    static int function1(int alpha); 
}; 

//... 
classA::function1(15); 

Notez que l'intérieur d'une méthode statique, vous ne pouvez pas accéder à toutes les variables membres non statiques, pour la même raison - il n'y a pas d'exemple pour fournir un contexte.

+0

ou 'classA' doit être un espace de noms. – Naveen

+2

@Naveen: vrai, mais ce serait un * vraiment * mauvais nom pour un espace de noms :) – sje397

+0

merci beaucoup. Cela fait un moment que j'en avais besoin. – Andrew

1

function1 est-elle une méthode statique? Si non, vous avez besoin d'un objet de cette classe pour appeler une fonction membre.

Ajoutez classA.h dans blah.cpp et créez un objet de classe A, puis appelez la fonction membre.