我一直在为我的编程课程做练习,而我现在所处的特定课程是关于朋友的功能/方法/课程。我遇到的问题是,我的朋友功能似乎并没有做到这一点;我得到的#[变量名]在这种情况下是私有的"我的代码周围的错误,我试图访问友元函数应该有权访问的变量。
这是头文件中的类定义(我为了节省空间而剪掉了不必要的东西)。
class Statistics {
private: // The personal data.
PersonalData person;
public:
Statistics();
Statistics(float weightKG, float heightM, char gender);
Statistics(PersonalData person);
virtual ~Statistics();
...
friend bool equalFunctionFriend(Statistics statOne, Statistics statTwo);
friend string trueOrFalseFriend(bool value);
};
以下是出现错误的方法。
bool equalFuntionFriend(Statistics statOne, Statistics statTwo)
{
// Check the height.
if (statOne.person.heightM != statTwo.person.heightM)
return false;
// Check the weight.
if (statOne.person.weightKG != statTwo.person.weightKG)
return false;
// Check the gender.
if (statOne.person.gender != statTwo.person.gender)
return false;
// If the function hasn't returned false til now then all is well.
return true;
}
所以,我的问题是:我做错了什么?
编辑:问题已经被Angew解决了。似乎这只是一个错字...非常愚蠢的我!答案 0 :(得分:2)
我猜测heightM
,weightKG
和gender
对您的PersonalData
类是私有的,这就是您收到错误的原因。仅仅因为您的函数是Statistics
的朋友,并不意味着他们可以访问Statistics
的成员的内部。他们只能访问Statistics
的内部。事实上,Statistics
本身甚至无法访问PersonalData
的内部,所以它的朋友肯定不会。{/ p>
有几种方法可以解决这个问题。你可以让PersonalData
的成员公开 - 但这不是一个好主意,因为你会减少封装。你可以让你的函数也成为PersonalData
的朋友 - 你可能会得到一个奇怪的友谊图(比如Facebook for C ++类!)。或者您可以为PersonalData
提供一些允许其他人查看其私人数据的公共界面。
正如@Angew在评论中指出的那样,当equalFuntionFriend
的朋友被命名为Statistics
时,您的函数被命名为equalFunctionFriend
- 您丢失了一封信。这也会导致这个问题。