C++ Friend 函数不能访问私有(private)成员;错误 2248

标签 c++ private-members friend-function

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

#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 消息。 代码有什么问题? 如果有任何支持,我将不胜感激。

谢谢

最佳答案

那是因为你试图从 main 访问私有(private)成员:

FriendFunction(&SomeClass::Member1, object1);

这一行引用了 main 中的私有(private)字段 &SomeClass::Member1,当然失败了。

关于C++ Friend 函数不能访问私有(private)成员;错误 2248,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32624373/

相关文章:

c++ - 在完全专用的模板函数中实例化一个类的对象

c++ - 为什么 lexical_cast 要求运算符>>位于匹配的 namespace 中?

c++ - 获取指向结构的第一个元素的指针

c++ - 如何为 3 个数据集创建多 MAP

javascript - OOP,命名空间顶级方法中的私有(private)函数

java - 为什么 `private static` 字段在 Java 8 接口(interface)中是不允许的?

c++ - 使用 std::sort 对字符串进行排序,使大写字母位于小写字母之后

c# - 为什么是私有(private)二传手?

c++ - 为模板类重载运算符<<

c++ - 仅在(互斥)requires-clauses : legal or an ODR-violation? 中通过差异重载隐藏的 friend