这里的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)
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)
| 归档时间: |
|
| 查看次数: |
7844 次 |
| 最近记录: |