0

したがって、何らかの理由でコンパイルしようとすると、main.cpp: value と balance がスコープ内で宣言されていないというエラーが表示されます。

メインで #include "account.h" を使用したのに、なぜそれらが定義されていないのですか?

また、コンストラクタやデストラクタなど、私のクラスに問題はありますか?

アカウント.cpp

using namespace std;

#include <iostream>
#include "account.h"

account::account(){


}

account::~account(){

}

int account::init(){
cout << "made it" << endl;
  balance = value;

}

int account::deposit(){
  balance = balance + value;
}

int account::withdraw(){
  balance = balance - value;
}

main.cpp

using namespace std;

#include <iostream>
#include "account.h"

//Function for handling I/O
int accounting(){


string command;

cout << "account> ";
cin >> command;
account* c = new account;

    //exits prompt  
    if (command == "quit"){
        return 0;
        }

    //prints balance
    else if (command == "init"){
        cin >> value;
        c->init();
        cout << value << endl;
        accounting();
        }

    //prints balance
    else if (command == "balance"){
        account* c = new account;
        cout << " " << balance << endl;
        accounting();
        }

    //deposits value
    else if (command == "deposit"){
        cin >> value;
        c->deposit();
        accounting();
        }

    //withdraws value
    else if (command == "withdraw"){
        cin >> value;
        cout << "withdrawing " << value << endl;
        accounting();
        }

    //error handling    
    else{
        cout << "Error! Command not supported" << endl;
        accounting();
        }               
}


 int main() {

     accounting();


return 0;
}

account.h

class account{

private:

int balance;

public:

    account();  // destructor
    ~account(); // destructor
    int value;
    int deposit();
    int withdraw();
    int init();

};

コードのスタイルが悪い場合は申し訳ありませんが、スタック オーバーフロー エディターで苦労しました。

4

2 に答える 2

1

あなたはそれらが通常の変数であるかのように参照してvalueいますbalanceが、そうではありません-それらはインスタンス変数です。それらを参照するオブジェクトが必要です。

account c;
cout << "withdrawing " << c.value << endl;

メソッド内からアクセスしている場合、たとえば from account::deposit- thenvalueは のシンタックス シュガーなthis->valueので、このように使用できます。オブジェクトは事実上*thisです。これらのステートメントは同等です。

balance += value;
balance += this->value;
balance += (*this).value;
于 2013-05-24T03:39:02.113 に答える
0

valueandbalanceは and のメンバーでclass accountあり、 and としてアクセスされると想定されていc->valueますc->balance。ただしbalanceprivate会員なので、では使えませんmain()。次のようなアクセサ関数を記述する必要があります。

int account::GetBalance() const
{
    return balance;
}

そしてそれを次のように呼び出します

cout << " " << c->GetBalance() << endl;

cまた、 を呼び出して、割り当てられたメモリを解放する必要があります。

delete c;
于 2013-05-24T03:40:50.727 に答える