寻找如何最好地通过 A 访问 B 类的队列,但我收到分段错误。我也在寻找在这两个类之间进行交流的最佳方式。在这种情况下,访问器方法是否正常?什么设计模式可以工作?谢谢
class B {
public:
int get_int() { return qi.front(); }
void put_int(int i) { qi.push(i); }
private:
queue<int> qi;
};
class A
{
public:
void get_event() { cout << b->get_int() << endl; }
void put_event(int a) { b->put_int(a); }
private:
B *b;
};
int main() {
A a;
a.put_event(1);
return 0;
}
如注释中所述,问题是未定义的初始化
可以通过使用构造函数进行初始化来解决此问题
#include<iostream>
#include<queue>
using namespace std;
class B {
public:
int get_int() { return qi.front(); }
void put_int(int i)
{
qi.push(i);
}
private:
queue<int> qi;
};
class A
{
public:
void get_event() { cout << b->get_int() << endl; }
void put_event(int a) { b->put_int(a); }
A()
{
b = new B();
}
~A() { delete b; }
private:
B *b;
};
int main() {
A a;
a.put_event(1);
a.get_event();
return 0;
}
输出
1
Program ended with exit code: 0
A a;
是一个未定义的引用,您必须使用 costructor 初始化它,并且由于您没有定义任何引用,因此您必须使用默认引用
A a=new A();
或者更好的是,按照您喜欢的方式编写两个类的协构函数并使用它们。