J'ai des problèmes avec les fonctions amis en C++, mais je soupçonne que c'est plus un symptôme d'un problème que j'ai avec les directives du préprocesseur et #include.problèmes de fonction ami
Ceci est un exemple stupide de ce que je faisais. Cinq fichiers: bobby.h, bobby.cpp, billy.h, billy.cpp et main.cpp. Billy a une fonction protégée appelée ReceiveMoney. Bobby a une fonction appelée banque qui appelle Billy's ReceiveMoney. c'est-à-dire qu'à chaque fois que Bobby se rend à la banque, il partage l'argent avec Billy.
billy.h
#ifndef BILLY_H
#define BILLY_H
#include "bobby.h"
class Billy
{
friend void Bobby::Bank(int, Billy &);
public:
Billy();
protected:
void ReceiveMoney(int inc);
private:
int money;
};
#endif
billy.cpp
#include "billy.h"
Billy::Billy()
{
money = 0;
}
void Billy::ReceiveMoney(int inc)
{
money+=inc;
}
bobby.h
#ifndef BOBBY_H
#define BOBBY_H
#include "billy.h"
class Bobby
{
public:
Bobby();
void Bank(int amount, Billy & b);
protected:
int money;
};
#endif
bobby.cpp
#include "bobby.h"
Bobby::Bobby()
{
money = 0;
}
void Bobby::Bank(int amount, Billy & b)
{
b.ReceiveMoney(amount/2);
}
main.cpp
#include "billy.h"
#include "bobby.h"
int main()
{
Bobby bo;
Billy bi;
bo.Bank(150, bi);
return 0;
}
Je reçois un grand nombre d'erreurs, généralement erreur C2653: « Bobby »: n'est pas un nom de classe ou espace de noms ou erreur C2653: « Billy »: n'est pas une classe ou nom de l'espace de noms
Je fais cela dans un projet de console vide dans VS0
Eh bien, je ne suis pas complètement nouveau à ce sujet. J'ai essayé d'avancer des déclarations. La ligne b.ReceiveMoney (montant/2); dans bobby.cpp provoque une erreur pour l'utilisation du type non défini 'Billy' – Tim
@Tim: Inclure 'billy.h' dans' bobby.cpp'. –
Merci, vous avez été très utile. – Tim