1

私は C# プログラマーで、C++ をいじって Windows フォーム アプリケーションを作成しようとしています。
ユーザーが作成したクラスを利用する Windows フォームがあります。基本的に、パラメーターを取るコンストラクターを使用しようとしていますが、私のフォームではパラメーターでオブジェクトを初期化できません。これがコードです。私は完全に困惑しているので、誰かが私に問題を説明してくれることを願っています...

ここに私のヘッダーファイルがあります: BankAcct.h

public ref class BankAcct
{
    private:
        int money;

    public:
        BankAcct();
        BankAcct(int);
        void Deposit(int);
        void GetBalance(int&);
};

そして私の定義ファイル: BankAcct.cpp

#include "StdAfx.h"
#include "BankAcct.h"

BankAcct::BankAcct()
{
    money = 0;  
}
BankAcct::BankAcct(int startAmt)
{
    money = startAmt;
}
void BankAcct::Deposit(int depAmt)
{
    money += depAmt;
}
void BankAcct::GetBalance(int& balance)
{
    balance = money;
}

そして最後に私のメインフォーム。もちろん、すべてをコピーするわけではありませんが、新しい銀行口座オブジェクトを宣言して、たとえば 50 ドルの残高から始めようとしています。

private:
    BankAcct myAccount(50);    //does not work!  WHY??

//private:
  //BankAcct myAccount;    //works

次に、フォームコンストラクターで私のコードは次のとおりです。

public:
    frmBank(void)
    {
        InitializeComponent();
        int bal;
        myAccount.GetBalance(bal);
        lblBankBalance->Text += Convert::ToString(bal);
    }

私は frmBank.h の先頭に BankAcct.h ファイルを含めました。ここで他に何が間違っていますか? デフォルトのコンストラクター (銀行の残高をゼロから開始するコンストラクター) を使用すると、うまく機能します。次のエラー メッセージが表示されます。

エラー C2059: 構文エラー: '定数'

エラー C2228: '.GetBalance' の左側にはクラス/構造体/共用体が必要です

これについてのすべての助けに感謝します!!

4

2 に答える 2

1

C# スタイルの初期化は C++ では機能しません。コンストラクターの初期化セクションにイニシャライザーを配置する必要があります (つまり、コンストラクター:の開始ブレースとの間{:

public:
    MyForm() : myAccount(50) {
        // Your constructor
    }
private:
    BankAcct myAccount;

現在の方法はmyAccountとして定義されていないBankAcctため、 の呼び出しGetBalanceもコンパイルされません。

于 2012-06-03T04:30:17.730 に答える
0

1 つの簡単な回避策:

private:
    BankAcct *myAccount; // Make this a pointer

... それから ...

frmBank(void)
{
    InitializeComponent();
    myAccount = new BankAcct(50);
    int bal = myAccount->GetBalance(bal);
    lblBankBalance->Text += Convert::ToString(bal);

他のアプローチもあります。しかし、「myAccount」オブジェクトを明示的に作成するのが、間違いなく最も明確で簡単だと思います。私見では...

于 2012-06-03T04:33:50.013 に答える