C ++朋友类数据访问

Cpt*_*ing 4 c++

这里的C ++新手。

我是写cfd(ish)代码的科学人。我为所有求解函数创建了一个类,并且该类处理了网格上的操作。网格类希望能够看到存储在求解类中的一些变量,因为将它们全部传递给网格类似乎有点费劲。

因此,在我的研究中,我遇到了朋友班,但似乎无法正常工作。请参阅下面的完全缩减示例。类A是求解器,它创建了网格类B。即使我已经编写了朋友类B,我仍然遇到以下编译错误(g ++):

在成员函数'void B :: testB()'中:

错误:未在此范围内声明“ a1”

这是代码:

#include <iostream>
using namespace std;
class B {
private:
    int b1;

public:
    void testB(){
        cout<<a1<<endl;
    };  


};

class A {
friend class B;

private:
    int a1;

public:
    void testA(){
        a1=2;
        B b;
        b.testB();
        };
};


int main(){
    A a;
    a.testA();
}
Run Code Online (Sandbox Code Playgroud)

Cro*_*yer 5

a1仅作为类A 的实例的一部分存在。换句话说,您需要一个A对象才能访问a1。

编辑:但是事实证明,这并不是您提供的源中的唯一问题。

这有效:

#include <iostream>
using namespace std;

class B;

class A {
  friend class B;
  private:
    int a1;
  public:
    void testA();
};

class B {
private:
    int b1;

public:
    void testB(A *a){
        cout << (a->a1) << endl;
    }
};

void A::testA() {
    this->a1 = 2;
    B b;
    b.testB(this);
}


int main(){
    A a;
    a.testA();
}
Run Code Online (Sandbox Code Playgroud)