【问题标题】:Can't spot the mistake in using "friend" function of another class C++无法发现使用另一个类 C++ 的“朋友”函数的错误
【发布时间】:2020-03-26 06:52:34
【问题描述】:

是的,我知道创建private 修饰符是为了禁止访问类数据
friend 不是打算允许对其进行特殊访问吗?

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

下面的所有内容都是按照许多教程中的方式实现的。
可能这只是我犯的一个愚蠢的错误,并且没有发现。

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】:

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

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

    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

    【讨论】:

      猜你喜欢
      • 2016-11-26
      • 1970-01-01
      • 2021-08-29
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 2014-03-23
      相关资源
      最近更新 更多