两个私有嵌套类之间的友谊

时间:2020-08-13 01:51:14

标签: c++ inner-classes forward-declaration friend-class

我有4个班级,A,A1,B和B1。类A包含一个私有的嵌套类A1,而类B包含一个私有的嵌套类B1。我希望类B :: B1的构造函数可以访问类型为A :: A1的对象的私有数据成员。为此,我的解决方案是使用关键字“ friend”。但是,我很难让外部的上班族之间的友谊开始工作,而且在线指南无法说明两个嵌套的私人班级之间的友谊。

计划是让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) {}

此代码似乎有很多错误,但是在我尝试使此代码起作用的所有尝试中都有许多不同类型的错误。对这些错误的解释可能会有所帮助,但是我正在寻找一个如何正确处理友谊和前向声明的可行示例。

0 个答案:

没有答案
相关问题