2012-11-25 4 views
0

J'ai reçu cette tâche et j'ai eu pas mal de problèmes avec le remplacement de l'information par de nouvelles données. Lorsqu'un nouveau client est créé, il doit créer un nouveau compte de base. Cela fonctionne bien mais j'essaye de permettre aux clients avec plusieurs types de comptes chacun avec leurs propres règles telles qu'étudiant/actuel qui chacun contient leurs propres valeurs.Pointeurs remplaçant des pointeurs plus anciens

Pour une raison quelconque, ma valeur monétaire d'un compte devient la valeur actuellement définie et, pour une raison quelconque, chaque compte, même pour différents clients, partage la valeur à l'intérieur. Donc, si compte1 a 200 £ alors le compte2 est alors créé avec 300 £. Le compte1 sera alors fixé à 300 £.

Customer.h

Customer(std::string sFirstName, std::string sLastName, 
    std::string sAddressLnA, 
    std::string sAddressLnB, 
    std::string sCity, 
    std::string sCounty, 
    std::string sPostcode, 
    AccountManager* bankAccount); 

    AccountManager* getAccount(void); 

    //outside class 
    std::ostream& operator << (std::ostream& output, Customer& customer); 

Customer.cpp

//Part of a method but i've shrunk it down 
AccountManager account(H); 
AccountManager accRef = account; //This the issue? 
Customer c(A, B, C, D, E, F, G, &accRef); 
customerList.insert(c); 
showPersonDetails(); 

//Output 
ostream& operator << (ostream& output, Customer& customer) 
{ 
    output << customer.getFirstName() << " " << customer.getLastName() << endl 
     << customer.getaddressLnA() << endl 
     << customer.getaddressLnB() << endl 
     << customer.getcity() << endl 
     << customer.getcounty() << endl 
     << customer.getpostcode() << endl 
     << (*customer.getAccount()) << endl; 
    return output; 

AccountManager.h

class AccountManager 
{ 
private: 
    double money; 
public: 
    AccountManager(double amount); 
    ~AccountManager(void); 
    double getMoney(); 

}; 

//Print 
std::ostream& operator << (std::ostream& output, AccountManager& accountManager); 

AccountManager.cpp

using namespace std; 

AccountManager::AccountManager(double amount) 
{ 
    money = amount; 
} 

AccountManager::~AccountManager() 
{ 
} 

double AccountManager::getMoney() 
{ 
    return money; 
} 

ostream& operator << (ostream& output, AccountManager& accountManager) 
{ 
    //Type of account 
    output << "Account Money: " << accountManager.getMoney() << endl; 
    return output; 
} 
+0

Notez que 'AccountManager accRef = compte,' ne crée pas une référence, vous copiez le 'account' objet. – enobayram

+1

Essayez également de fournir un exemple minimal illustrant votre problème. Le code fourni n'a rien à voir avec le problème mentionné. Vous obtiendrez une réponse assez rapidement si vous fournissez du code qui se compile et s'exécute simplement. – enobayram

Répondre

2
AccountManager accRef = account; //This the issue? 
Customer c(A, B, C, D, E, F, G, &accRef); 

Vous créez un compte en tant que variable locale, passer un pointeur vers elle au constructeur Customer, les Customer magasins pointeur, puis « une méthode » se termine, la variable locale passe hors de portée, et la Customer est laissé avec un pointeur qui pend. Ensuite, vous déréférencer le pointeur et obtenir des résultats étranges.

(Pourquoi Customer magasin le compte par référence de toute façon?)