2017-11-06 4 views
-2

Hello StackOverflowコミュニティ。 クラスの値を変更できないようです。 私はC++を初めて使っています。私は解決策を探していましたが、それを理解できないようです。C++。オブジェクトへのアクセスと値の設定

This is my Account.cpp 

    #include "Account.h" 
#include <iostream> 
using namespace std; 



Account::Account(string accName, int accBalance) 
{ 
    name = accName; 
    balance = accBalance; 
    std::vector<std::string> Report(); 

} 


bool Account::Deposit(Account a,int amt) { 
    if (amt >= 0) { 
     a.balance += amt; 
     return 1; 
    } 
    else 
     return 0; 
} 

bool Account::Withdraw(Account a, int amt) { 
    if (amt >= 0 && (a.balance - amt > 0)) { 
     a.balance -= amt; 
     return 1; 
    } 
    else 
     return 0; 
} 

int equal(string a, string b) { 
    if (a == b) return 1; 
    else return 0; 
} 

Account::~Account() 
{ 
} 

これは私デポジットを行った後、出力のアカウント情報、バランス値が0 で変化しないまま何らかの理由で任意の助けのための私のmain.cppに

int main() { 
int aux_bal; 
string aux_name; 
int choice; 
std::string InputName; 
std::list<Account> arr; 
std::list<Account>::iterator result; 

do 
{ 


    cout << endl 
     << " 1 - Create New Account.\n" 
     << " 2 - View Balance.\n" 
     << " 3 - Make a Deposit\n" 
     << " 4 - Make a Withdraw\n" 
     << " 5 - Check log\n" 
     << " 6 - Exit.\n" 
     << " Enter your choice and press return: "; 
    cin >> choice; 

    switch (choice) 
    { 
    case 1: 
     cout << "Input holder's account name: \n"; 
     cin >> InputName; 
     arr.push_back(Account(InputName, 0)); 


     break; 
    case 2: 
     cout << "Enter Account Name:\n"; 
     cin >> InputName; 
     for (result = arr.begin(); result != arr.end(); result++) { 
      int aux_bal = result->balance; 
      std::string aux_name = result->name; 
      if (aux_name == InputName) { 
       cout <<"Account Balance:"<< aux_bal << endl; 
       cout << "Account Holder:" << aux_name << endl; 
      } 
     } 
      break; 
    case 3: 
     cout << "Enter Account Name:\n"; 
     cin >> InputName; 
     for (result = arr.begin(); result != arr.end(); result++) { 
      int aux_bal = result->balance; 
      std::string aux_name = result->name; 
      if (aux_name == InputName) { 
       cout << "Enter ammount to Deposit:\n"; 
       cin >> aux_bal; 
       (*result).Deposit(*result,aux_bal); 
      } 
     } 
     break; 
    case 4: 
     //code to help the user like give him 
     //extra information about the mode and the controller 
     break; 
    case 5: 

     break; 
    case 6:cout << "End of Program.\n"; 
     break; 
    default: 
     cout << "Not a Valid Choice. \n" 
      << "Choose again.\n"; 
     break; 
     } 

    } while (choice != 6); 
    return 0; 

} 

してくださいますか?

+2

参考までに渡す必要があります。値渡しとは、関数がオブジェクトの一時的なコピーを変更するだけで、変更が外部からは観測できないことを意味します。これは超基本的なC++なので、最初の例であなたの本に相談してください。しかし、もしあなたがSOスレッドを必要とするならば、たくさんあるでしょう。 [関数はC++のオブジェクト属性を変更しない](https://stackoverflow.com/questions/42915874/function-doesnt-change-object-attributes-in-c) –

+1

短い回答: 'Account :: Deposit'と' Account :: Withdraw'は2番目の 'Account'を値で取るべきではなく、' this'を操作しなければなりません。長い答え:数値的なバランスで金融取引をモデル化しないでくださいが、トランザクションオブジェクトの合計として – Caleth

+0

うわー、私は実際にそれらがインスタンスメソッドであったことに気づいていませんでした。それはさらに悪いことです。申し訳ありませんが、これは基本的なものです。このような質問をする前に本をお読みください。あなたの本がほとんどこれを最初に説明していないなら、より良いものを手に入れてください。 –

答えて

0

deposit関数は、それが所属する勘定科目オブジェクトに対して作用する必要があります。引数として渡す必要はありません。また、整数はブール値ではありません。最後に、預金額はなぜintですか? $ 20.25を入金したい場合はどうすればいいですか?

bool Account::Deposit(int depositAmt) 
{ 
    if (depositAmt >= 0) { 
     this->balance += depositAmt; // "this->" is optional 
     return true; 
    } 
    else 
     return false; 
} 
+0

私はちょうど練習しているので、関数型についてはあまり気にしませんでした。 ヒントをありがとう! – newtopm

+0

'this'はポインタなので、' this.'は構文エラーです。シンタックスは 'this-> balance'ですが、' this-> 'は暗黙的に一致する識別子が検索されるため、技術的に冗長です。 Fwiwは意見が大きく異なりますが、自分自身や他の人は、 'this->'を書かずに、代わりに 'm_'またはそれに類するメンバー変数を前置する方が好きです。しかし、それは他のスレッドでは議論の対象となっています。 –

関連する問題