C++ C++;好友功能无法访问私有memeber;错误2248

C++ C++;好友功能无法访问私有memeber;错误2248,c++,private-members,friend-function,C++,Private Members,Friend Function,对于家庭作业,我必须创建一个包含bool类型的一些私有成员的类。必须创建一个friend函数,它将接受两个参数:指向对象的指针和指向对象私有成员的指针。 代码定义如下: #include "stdafx.h" #include<iostream> #include<cstdlib> #include<ctime> using namespace std; class SomeClass { friend int FriendFunction(bool

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

#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;

}
#包括“stdafx.h”
#包括
#包括
#包括
使用名称空间std;
上课{
friend int FriendFunction(bool SomeClass::*privMember,SomeClass*对象);
私人:
布尔成员1;
布尔成员2;
布尔成员3;
公众:
SomeClass(){
bool-tmp;
if(rand()<16384)
tmp=假;
其他的
tmp=真;
成员1=tmp;
if(rand()<16384)
tmp=假;
其他的
tmp=真;
成员2=tmp;
if(rand()<16384)
tmp=假;
其他的
tmp=真;
成员3=tmp;
}
};
int-FriendFunction(bool-SomeClass::*privMember,SomeClass*对象){
如果(!(对象->*私有成员))
对象->*privMember=!(对象->*privMember);
其他的

cout这是因为您试图从
main
访问私有成员:

FriendFunction(&SomeClass::Member1, object1);

此行引用的是
main
中的私有字段
&SomeClass::Member1
,当然失败了。

我打赌编译器错误在
main
函数中,您在该函数中实际访问私有成员。如果您有自由(在任务上下文中)若要定义getter函数,则可以轻松访问指向类的私有成员的指针。然后可以使用FriendFunction。这确实是问题的原因。声明
int main()
作为SomeClass的朋友编译代码,但这当然只是证明问题所在的方法。问题仍然存在:如何将指向私有类成员的指针传递给FriendFunction?@Marko,在您的特定情况下,我会将变量存储在数组中,并在该数组中传递索引,而不是指针给成员。我知道传递索引是解决方案之一,但不幸的是,这并不能真正为我的家庭作业任务提供解决方案。任务中定义的是bool类型的私有类成员的定义,bool是一个具有两个参数(指向对象的指针和指向对象的私有成员的指针)的友元函数这需要将私有成员的值更改为true,以防构造函数将其设置为false。它甚至可以按照任务要求的方式完成吗?