类的C ++朋友函数无法访问封装的类

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

嗨,我正在尝试从类B访问类A的私有成员x

下面的代码显示了我发现但出现错误的方式任何建议都将有助于实现我的目标。在此先感谢

> main.cpp: In member function ‘void B::bfun(A*)’:
main.cpp:19:9: error: invalid use of incomplete type ‘class A’
     Aref->x = 1;
         ^~
main.cpp:11:7: note: forward declaration of ‘class A’
 class A;
       ^
main.cpp:20:11: error: ‘x’ was not declared in this scope
     cout<<x;
       ^

代码:

    #include <iostream>
using namespace std;
class A;
class B{
    private:
    public:
    void bfun (A* Aref);
};
void B::bfun(A* Aref)
{
    Aref->x = 1;
    cout<<x;
}

class A{
    private:
    int x;
    B b_obj;


    public:
    void afun();
    friend void B::bfun(A*);
};
void A::afun()
{
  x=0;
  b_obj.bfun(this);
}


int main()
{
    printf("Hello World");
    A aobj;
    aobj.afun();
    return 0;
}
c++ friend
2个回答
0
投票

列出的错误与允许与朋友的访问无关;这是关于什么是不完整类型的实现,这归因于您如何为类声明和成员实现订购代码。将代码更改为B::bfun after的正确顺序即可解决该问题。

A

输出

#include <iostream>
class A;

class B
{
private:
public:
    void bfun (A* Aref);
};

class A{
private:
    int x;
    B b_obj;
public:
    void afun();
    friend void B::bfun(A*);
};

void B::bfun(A* Aref)
{
    Aref->x = 1;
    std::cout<< Aref->x << '\n' ;
}

void A::afun()
{
    x=0;
    b_obj.bfun(this);
}

int main()
{
    A aobj;
    aobj.afun();
    return 0;
}

1


0
投票

由于x不是B的直接成员,但是您仍然可以通过以下方式访问它A,您应该写:

See it live
© www.soinside.com 2019 - 2024. All rights reserved.