2011-12-04 37 views
0

なぜ、クラスのTaxWayでメンバ変数を保持できないのか説明できます参照によって初期化されるバンク?コードを修正するにはどうすればよいですか? メンバ変数をBank&という参照に変更すると、その変数は機能します。私は同じことが "参照変数ではなく"起こるべきだと思った。どのようにそれを行うことができますか?メンバ変数としての参照

class Bank; 

class TaxWay : public Way 
{ 
    public: 
    TaxSquare(int, int, Bank&); 
    virtual void process(); 

    private: 
    int taxAmount; 
    Bank bank; 
}; 

TaxWay::TaxWay(int anID, int amount, Bank& theBank) 
: Way(anID),taxAmount(amount),bank(theBank) 
{ 
} 

私のように、オブジェクトを作成します。

TaxWay TaxWay9(9,150, theBank); 
+0

コンパイラからどのようなエラーがありますか?このエラーの原因となる*実際のコードを表示できますか? –

+0

私はこれをコンパイルしようとしましたが、3つのエラーメッセージを修正した後、私は諦めました。私たちがあなたを助けてくれるようなら、これ以上のことをする必要があります! – TonyK

+0

これは単なるコードの一部であり、全体ではありません。私は私の質問を表現するだけで十分だと思った。 – arjacsoh

答えて

2

例では、Bankクラスを定義していないため、TaxWayクラスは銀行のコピーを保持できません。最低でも、スペースを割り当てることができるように、Bankクラスのサイズを知っていなければなりません。

一方、Bankに含まれる内容に応じて、コピーすることはお勧めできません。それも銀行のお金をコピーするのだろうか? :-)

+0

入手した場合、メンバー変数として参照を使用することをお勧めします。それが私のやりたいことです。 taxWayも銀行のお金を修正する必要があります。なぜ私は他の方法でコンパイルしていないのかという疑問がありました。とにかくありがとう。 – arjacsoh

6

二つの重要なポイント:

  • あなたはBank bankとしてメンバ変数を宣言する場合は、あなたはヘッダファイルをインクルードする必要がありますクラスBankの定義を持っています。前の宣言だけで、コンパイルエラーが発生します。

  • ただし、Bank & bankまたはBank *bankと宣言する場合は、前方宣言で十分です。クラスBankの定義は、Bankのメンバーにアクセスしない限り(たとえば、クラスTaxWayの一部のメンバー関数のインライン定義の場合)、この場合は必要ありません。

3

Bankを定義なしの宣言として宣言したことは、あなたの問題である場合とそうでない場合があります。コンパイラがTaxWayに達すると、コンパイラはクラスBankについてまだ何も知らないので、タイプBankのメンバ変数を宣言することはできません。

関連する問題