1

我有 4 个班级,A、A1、B 和 B1。类 A 包含一个私有嵌套类 A1,类 B 包含一个私有嵌套类 B1。我希望 B::B1 类的构造函数能够访问 A::A1 类型对象的私有数据成员。我的解决方案是使用关键字“朋友”。但是,我无法让外部班级之间的相互友谊发挥作用,并且在线指南不考虑两个私人嵌套班级之间的友谊。

计划是让 B 成为 A 的朋友,以便 B1 了解 A1。然后让 A 成为 B 的朋友,这样 A1 就知道 B1。然后让 B1 成为 A1 的朋友,这样 B1 就可以访问 A1 的私有数据成员。这是一些无法做到这一点的代码。您可以随意忽略它。

    //A.h
    #pragma once
    #include "B.h"
    
    class A {
        friend class B;
    private:
        class A1 {
            friend class B::B1;
        private:
            int num = 3;
        };
        A::A1 a1;
    }
    //B.h
    #pragma once

    class A;
    
    class B {
        friend class A;
        //stuff
    private:
        class B1;
    public:
        B1& b; // I would prefer this to not be a reference
        B(A a); // Error: incomplete type
    };
    // B.cpp
    #include "B.h"
    #include "A.h"
    
    class B::B1{
        B::B1(A::A1 a1) {
            int num = a.num;
        };
            int num;
    };
    B::B(A a) : b(a.a1) {}

这段代码似乎有很多错误,但在我试图让它工作的所有尝试中都有很多不同类型的错误。对这些错误的解释会有所帮助,但我正在寻找一个关于如何正确建立友谊和前向声明的工作示例。

4

0 回答 0