2017-10-18 11 views
0

Recherche de la meilleure façon d'accéder à la file d'attente de la classe B via A, mais je reçois une erreur de segmentation. Aussi je cherche le meilleur moyen de communiquer entre ces deux classes. Les méthodes d'accès sont-elles acceptables dans ce scénario? Quel modèle de conception pourrait fonctionner? MerciCommunication entre les membres de données de classe en 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' est un pointeur non initialisé contenant une corbeille aléatoire. Votre programme présente un comportement indéfini. Il ne crée jamais réellement une instance de 'B'. –

Répondre

0

Comme mentionné dans le problème de commentaire est initialisation non définie

vous pouvez résoudre ce problème en utilisant le constructeur pour l'initialisation

#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; 
} 

Sortie

1 
Program ended with exit code: 0 
0
A a; 

est un non défini référence, vous devez l'initialiser avec un costructor et puisque vous ne l'avez pas défini de, vous devez utiliser la valeur par défaut un

A a=new A(); 

ou mieux, écrire les costructors des deux classes que vous préférez et de les utiliser.