【发布时间】:2019-01-08 02:33:15
【问题描述】:
AuxiliaryOffice 类中的 addBudget 函数是预算类的友元函数。但是编译器给了我错误,它不能访问 Budget 类的私有成员。
class Budget;
class AuxiliaryOffice
{
private:
double auxBudget;
public:
AuxiliaryOffice()
{
auxBudget = 0;
}
double getDivisionBudget()
{
return auxBudget;
}
void addBudget(double a, Budget &ref)
{
ref.corpBudget += a;
auxBudget += a;
}
};
class Budget
{
private:
static double corpBudget;
double divisionBudget;
friend void AuxiliaryOffice::addBudget(double, Budget&);
public:
Budget()
{
divisionBudget = 0;
}
void addBudget(double a)
{
corpBudget += a;
divisionBudget += a;
}
double getDivisionBudget() const
{
return divisionBudget;
}
double getCorpBudget() const
{
return corpBudget;
}
};
double Budget::corpBudget = 0;
【问题讨论】:
-
一台计算机试图从头到尾编译你的程序。它从头到尾读取它,而不是相反。在您的计算机读取
AuxiliaryOffice并尝试编译它时,它根本不知道这个神秘的Budget类是什么,它只是在那个时候前向声明的。这对您的编译器来说是一个很大的谜团,因此您的编译器对尝试访问未定义类的方法成员非常不满。
标签: c++ c++11 visual-c++