C ++中类数据成员之间的通信

时间:2017-10-18 01:58:15

标签: c++ oop segmentation-fault

寻找如何通过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;
}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

A a;

是一个未定义的引用,你必须用一个costructor初始化它,因为你没有定义任何引用,你必须使用默认的

A a=new A(); 

或更好,根据您的喜好编写两个类的结构,并使用它们。