簡體   English   中英

類的C ++朋友函數無法訪問封裝的類

[英]C++ friend function of class not able to access the encapsulated class

嗨,我正在嘗試訪問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;
}

列出的錯誤與允許訪問朋友無關; 這是關於什么是不完整類型的實現,這歸因於您如何為類聲明和成員實現訂購代碼。 在正確的類A聲明之后將代碼更改為B::bfun解決該問題。

#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

現場觀看

由於x不是B的直接成員,但是無論如何您都可以通過A來訪問它,因此應該這樣寫:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM