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

一种简单的解决方法:

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 回答