C ++ Friend函数无法访问私有memeber;错误2248

时间:2015-09-17 07:06:12

标签: c++ private-members friend-function

对于家庭作业,我必须创建一个包含bool类型的私有成员的类。必须创建一个将使用两个参数的友元函数:指向对象的指针和指向对象的私有成员的指针。 代码定义如下:

#include "stdafx.h"
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;

class SomeClass {
    friend int FriendFunction(bool SomeClass::*privMember, SomeClass *object);
private:
    bool Member1;
    bool Member2;
    bool Member3;
public:
    SomeClass() {
        bool tmp;

        if (rand()  < 16384)
            tmp = false;
        else
            tmp = true;
        Member1 = tmp;

        if (rand()  < 16384)
            tmp = false;
        else
            tmp = true;
        Member2 = tmp;

        if (rand()  < 16384)
            tmp = false;
        else
            tmp = true;
        Member3 = tmp;
    }
};

int FriendFunction(bool SomeClass::*privMember, SomeClass *object) {
    if (!(object->*privMember))
        object->*privMember = !(object->*privMember);
    else
        cout << "No changes made" << endl;
    return 0;
}


int main()
{
    srand(time(0));
    SomeClass *object1 = new SomeClass();

    FriendFunction(&SomeClass::Member1, object1);
    FriendFunction(&SomeClass::Member2, object1);
    FriendFunction(&SomeClass::Member3, object1);

    return 0;

}

FriendFunction调用不编译,编译器报告C2248消息。 代码有什么问题? 我很感激任何支持。

由于

1 个答案:

答案 0 :(得分:1)

那是因为您尝试从main访问私人成员:

FriendFunction(&SomeClass::Member1, object1);

这一行引用&SomeClass::Member1的私人字段main,当然也失败了。