C ++好友功能不起作用,在此上下文中出现私有错误

时间:2012-12-02 20:05:15

标签: c++ function private friend

我一直在为我的编程课程做练习,而我现在所处的特定课程是关于朋友的功能/方法/课程。我遇到的问题是,我的朋友功能似乎并没有做到这一点;我得到的#[变量名]在这种情况下是私有的"我的代码周围的错误,我试图访问友元函数应该有权访问的变量。

这是头文件中的类定义(我为了节省空间而剪掉了不必要的东西)。

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解决了。似乎这只是一个错字...非常愚蠢的我!

1 个答案:

答案 0 :(得分:2)

我猜测heightMweightKGgender对您的PersonalData类是私有的,这就是您收到错误的原因。仅仅因为您的函数是Statistics的朋友,并不意味着他们可以访问Statistics成员的内部。他们只能访问Statistics的内部。事实上,Statistics本身甚至无法访问PersonalData的内部,所以它的朋友肯定不会。{/ p>

有几种方法可以解决这个问题。你可以让PersonalData的成员公开 - 但这不是一个好主意,因为你会减少封装。你可以让你的函数也成为PersonalData的朋友 - 你可能会得到一个奇怪的友谊图(比如Facebook for C ++类!)。或者您可以为PersonalData提供一些允许其他人查看其私人数据的公共界面。

正如@Angew在评论中指出的那样,当equalFuntionFriend的朋友被命名为Statistics时,您的函数被命名为equalFunctionFriend - 您丢失了一封信。这也会导致这个问题。