J'apprends le C++ et j'essaie d'en apprendre plus sur l'utilisation du clavier ami.Comment utiliser les classes imbriquées correctement en C++?
Toutefois, j'ai des problèmes pour utiliser des classes imbriquées dans mon fichier d'en-tête. Je sais que les fichiers d'en-tête ne doivent être utilisés que pour les déclarations, mais je ne voulais pas y inclure un fichier cpp, donc j'ai simplement utilisé un fichier d'en-tête pour déclarer et construire.
De toute façon, j'ai un fichier main.cpp que je veux strictement utiliser pour créer des objets de classes et accéder à ses fonctions.
Cependant, je ne sais pas exactement comment créer la fonction FriendFunctionTest dans mon fichier d'en-tête où je peux y accéder dans mon fichier source main.cpp en utilisant l'objet Class d'en-tête parce que j'essaie de comprendre le mot-clé "friend" .
Voici mon code d'en-tête:
#ifndef FRIENDKEYWORD_H_
#define FRIENDKEYWORD_H_
using namespace std;
class FriendKeyword
{
public:
FriendKeyword()
{//default constructor setting private variable to 0
friendVar = 0;
}
private:
int friendVar;
//keyword "friend" will allow function to access private members
//of FriendKeyword class
//Also using & in front of object to "reference" the object, if
//using the object itself, a copy of the object will be created
//instead of a "reference" to the object, i.e. the object itself
friend void FriendFunctionTest(FriendKeyword &friendObj);
};
void FriendFunctionTest(FriendKeyword &friendObj)
{//accessing the private member in the FriendKeyword class
friendObj.friendVar = 17;
cout << friendObj.friendVar << endl;
}
#endif /* FRIENDKEYWORD_H_ */
Dans mon fichier main.cpp, je voulais faire quelque chose comme ceci:
FriendKeyword keyObj1;
FriendKeyword keyObj2;
keyObj1.FriendFunctionTest(keyObj2);
Mais évidemment, sa ne va pas au travail depuis le principal. cpp ne peut pas trouver la fonction FriendFunctionTest dans le fichier d'en-tête.
Comment résoudre ce problème?
Et je m'excuse à nouveau, j'essaie juste d'apprendre le C++ en ligne.
'FriendFunctionTest' n'est pas une fonction membre, vu que votre définition ne nécessite pas' FriendKeyword :: '. Qu'est-ce que ça a à voir avec 'keyObj1'? Pour élaborer, une fois que 'friend' est impliqué, la fonction n'a aucune possibilité d'être membre de cette classe, même si elle est définie à l'intérieur de la classe. – chris
Pourquoi le tag Java? – Mysticial
Ce n'est pas comme ça qu'un ami travaille. Il est généralement utilisé entre deux classes différentes et non deux instances différentes de la même classe. – ksming