【问题标题】:c++ class function friend to another classc ++类函数朋友到另一个类
【发布时间】:2016-11-26 14:53:54
【问题描述】:

我正在尝试将一个类成员函数指定为另一个类的朋友, 但它让我只能访问公共成员,而不是受保护或私人成员。它与免费功能一起工作正常。

Visual Studio 错误:

member "Class1::protected_int" (declared at line 9) is inaccessible
member "Class1::private_int" (declared at line 11) is inaccessible
class Class2;

class Class1 {
    friend void Class2::TEST(const Class1& ex);
    friend void TEST(const Class1& ex);

public:
    int public_int;
protected:
    int protected_int;
private:
    int private_int;
};

class Class2{
public:
    void TEST(const Class1& ex);
};

void Class2::TEST(const Class1& ex){
    int pub = ex.public_int;
    int pro = ex.protected_int;
    int pri = ex.private_int;
}

void TEST(const Class1& ex){
    int pub = ex.public_int;
    int pro = ex.protected_int;
    int pri = ex.private_int;
}

Image

【问题讨论】:

    标签: c++ class friend friend-function


    【解决方案1】:

    这里的程序已经不正确了:

    friend void Class2::TEST(const Class1& ex);
    

    Class2 不完整,因此您还不能访问它的成员。如果您对代码重新排序,以便在需要时完成所有操作:

    class Class1;
    
    class Class2{
    public:
        void TEST(const Class1& ex);
    };
    
    class Class1{
        friend void Class2::TEST(const Class1& ex);
        friend void TEST(const Class1& ex);
    
        // ...
    };
    

    然后一切编译正常。

    【讨论】:

    • 这也是我自己发现的;但是,当Class1Class2 之间存在“循环友谊”时,这无济于事..
    猜你喜欢
    • 1970-01-01
    • 2021-08-29
    • 2012-05-19
    • 2011-03-13
    • 2010-09-19
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多