2017-10-18 82 views
0

寻找如何通过A最佳访问B类队列,但我收到了分段错误。此外,我正在寻找这两个班级之间沟通的最佳方式。在这种情况下访问器方法是否正常?什么设计模式可以工作?由于C++中的类数据成员之间的通信

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; 
} 
+1

'A :: b'是一个包含随机垃圾的未初始化指针。您的程序展示未定义的行为。它从来没有实际创建一个'B'的实例。 –

回答

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 
0
A a; 

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

A a=new A(); 

或更好,因为你喜欢写这两个类的costructors并使用它们。