gpt4 book ai didi

C++友元类数据访问

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:50 26 4
gpt4 key购买 nike

这里是 C++ 新手。

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

所以在我的研究中,我遇到了 friend 类,但似乎无法让它发挥作用。请参阅下面的完全缩减示例。 A类是求解器,它创建了一个网格类B。即使我写了 friend 类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();
}

最佳答案

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();
}

关于C++友元类数据访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5371499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com