2009-11-14 5 views
0

Y a-t-il quelque chose que je dois faire différemment pour définir une chaîne dans une méthode setter? C'est ma classe:Définition d'une chaîne dans la méthode setter

class SavingsAccount 
{ 
public: 
    void setData(); 
    void printAccountData(); 
    double accountClosure() {return (accountClosurePenaltyPercent * accountBalance);} 
private: 
    int accountType; 
    string ownerName; 
    long ssn; 
    double accountClosurePenaltyPercent; 
    double accountBalance; 
}; 

void SavingsAccount::setData() 
{ 
    cout << "Input account type: \n"; 
    cin >> accountType; 
    cout << "Input your name: \n"; 
    cin >> ownerName; 
    cout << "Input your Social Security Number: \n"; 
    cin >> ssn; 
    cout << "Input your account closure penalty percent: \n"; 
    cin >> accountClosurePenaltyPercent; 
    cout << "Input your account balance: \n"; 
    cin >> accountBalance; 
} 


int main() 
{ 
    SavingsAccount newAccount; 
    newAccount.setData(); 
} 
+0

@Jet - Ne pas formater votre code en ajoutant '
' après chaque ligne. Utilisez la fonction de bloc de code (en haut de la zone d'édition). Fixé maintenant –

+0

ok. Je me demandais s'il y avait quelque chose pour ça. Je ne savais pas où c'était! – Crystal

Répondre

0

Ne l'appelez pas "setter" :)? Il ne prend aucun paramètre et lit les données de stdin tandis que pour les setters, la sémantique habituelle est de prendre un paramètre et de l'assigner aux champs appropriés. Celui-ci peut s'appeler "readData()"

0

Recevez-vous des erreurs de votre code ou demandez-vous simplement la meilleure façon de le faire? Vraiment vous devriez refactoriser le code lié dans leurs fonctions associées pour garder les entrées et les sorties de la console dans la méthode principale et transmettre les données à la fonction par le biais de paramètres. Mais de toute façon sans refactoring essayer ceci:

#include <sstream> 
#include <iostream> 

using namespace std; 

class SavingsAccount 
{ 
public: 
    void setData(); 
    void printAccountData(); 
    double accountClosure() {return (accountClosurePenaltyPercent*accountBalance);} 
private: 
    int accountType; 
    string ownerName; 
    long ssn; 
    double accountClosurePenaltyPercent; 
    double accountBalance; 
}; 

void SavingsAccount::setData() 
{ 
stringstream str; 

cout << "Input account type: \n"; 
cin >> str; 
str >> accountType; // convert string to int 

cout << "Input your name: \n"; 
cin >> str; 
str >> ownerName; 

cout << "Input your Social Security Number: \n"; 
cin >> str; 
str >> ssn; // convert to long 

cout << "Input your account closure penalty percent: \n"; 
cin >> str; 
str >> accountClosurePenaltyPercent; // convert to double 

cout << "Input your account closure penalty percent: \n"; 
cin >> str; 
str >> accountClosurePenaltyPercent; // convert to double 

cout << "Input your account balance: \n"; 
cin >> str; 
str >> accountBalance; // convert to double 
} 

int main() 
{ 
SavingsAccount newAccount; 
newAccount.setData(); 
} 
+0

Pas une erreur de compilation, mais une erreur d'exécution que je ne connais pas. Il est: Assignment8_1 (491) malloc: *** erreur pour objet 0x100006240: pointeur étant libéré n'a pas été alloué *** définir un point d'arrêt dans malloc_error_break pour déboguer piège Abandonner logout Je suppose que je ne savais pas si vous pouvez régler les cordes comme je l'ai fait ici comme un int ou un double. Merci! – Crystal

+0

Vous pouvez également envisager d'utiliser un constructeur et un destructeur pour la classe SavingsAccount afin de pouvoir utiliser les mots clés new et delete et contrôler les allocations de mémoire. Cela pourrait vous aider à éviter votre erreur d'exécution. – SimonDever

Questions connexes