2017-10-18 17 views
0

クラスBのキューにAからアクセスするにはどうすればよいのか分かりますが、セグメンテーション違反が発生しています。また、私はこれらの2つのクラス間で通信するための最善の方法を探しています。このシナリオでアクセサーメソッドは問題ありませんか?どのようなデザインパターンが使えますか?コメントの問題に言及したように感謝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でそれを初期化する必要があり、あなたがいずれかを定義しなかったので、あなたは、デフォルトの1

A a=new A(); 

以上を使用する必要がありますあなたが好むように2つのクラスのcostructorsを書き、それらを使用しています。

関連する問題