在使用其他类C ++的“朋友”功能时找不到错误

问题描述 投票:0回答:1

是的,我知道创建“私有”修饰符是为了禁止访问班级数据但是“朋友”不是要允许他们获得特殊权限吗?

编译器:main.cpp:在成员函数'void C :: blah(B&)'中:main.cpp:48:26:错误:'int B :: a'在此上下文中是私有的std :: cout << obj.a << std :: endl;

下面的所有内容都是在许多教程中实现的方式。可能只是我犯了一个愚蠢的错误而盲目发现。

Class C;

class B {
private:

    int a = 2;

public:

    friend void blah(B& obj);

};

class C {
public:

    void blah(B& obj) {
        std::cout << obj.a << std::endl;  //*
    }

};

*成员B :: a无法访问

c++ friend
1个回答
0
投票

您要声明一个名为blah的非成员函数,但不将C::blah声明为friend

您可以将代码更改为以下代码,并注意声明和定义的顺序。

class B;

class C {
public:
    void blah(B& obj);
};

class B {
private:
    int a = 2;
public:
    friend void C::blah(B& obj);
};

void C::blah(B& obj) {
    std::cout << obj.a << std::endl;  //*
}

LIVE

© www.soinside.com 2019 - 2024. All rights reserved.