У меня есть некоторые трудности с дружественными функциями в C++, но я подозреваю, что это скорее симптом проблемы, которая у меня есть с директивами препроцессора и #include.
Это глупый пример того, что я делал. Пять файлов: bobby.h, bobby.cpp, billy.h, billy.cpp и main.cpp. У Билли есть защищенная функция ReceiveMoney. У Бобби есть функция, называемая банком, которая вызывает функцию ReceiveMoney Билли. то есть каждый раз, когда Бобби идет в банк, он делит деньги с Билли.
Билли.ч
#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
Билли.cpp
#include "billy.h"
Billy::Billy()
{
money = 0;
}
void Billy::ReceiveMoney(int inc)
{
money+=inc;
}
Бобби.h
#ifndef BOBBY_H
#define BOBBY_H
#include "billy.h"
class Bobby
{
public:
Bobby();
void Bank(int amount, Billy & b);
protected:
int money;
};
#endif
Бобби.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;
}
Я получаю большое количество ошибок, обычно ошибка C2653: «Бобби»: не имя класса или пространства имен или ошибка C2653: «Билли»: не имя класса или пространства имен
Я делаю это в пустом консольном проекте в VS0.