私はC++でATMオブジェクト指向プロジェクトを書いています。ここではC#の実装が見つかりました。これは PDF file with implementationです。 私はこのプロジェクトをC++に変換し、Code :: Blocksでビルドしようとしていました。 現在、私はプロジェクトをデバッグしようとしていますが、多くのエラーが発生します。私はそれらのいくつかを解決することができましたが、まだ新しいものが現れています。現在、私は何かにこだわっていて、私が助けてくれる答えが見つからない、誰かが私にここで起こっていることを説明するかもしれない。ここでエラーが参照するオブジェクトのコードは次のとおりです。C++のATMプロジェクト - コンパイラはオブジェクトが関数だと思いますか?
`
ATM::ATM()
{
userAuthenticated = false;
currentAccountNumber = 0;
Screen screen;
Keypad keypad;
CashDispenser cashDispenser;
DepositSlot depositSlot;
BankDatabase bankDatabase;
}
void ATM::Run()
{
while(true)
{
while(!userAuthenticated)
{
screen.DisplayMessage("Welcome!\n");
AuthenticateUser();
}
PerformTransactions();
userAuthenticated = false;
currentAccountNumber = 0;
screen.DisplayMessage("\nThank you! Goodbye!\n");
}
}
void ATM::AuthenticateUser()
{
screen.DisplayMessage("\nPlease enter your account number: ");
int accountNumber = keypad.GetInput();
screen.DisplayMessage("\nPlease enter your PIN number: ");
int pin = keypad.GetInput();
userAuthenticated = bankDatabase.AuthenticateUser(accountNumber, pin);
if (userAuthenticated)
currentAccountNumber = accountNumber;
else
screen.DisplayMessage("Invalid account number or PIN, please try again.\n");
}
void ATM::PerformTransactions()
{
Transaction currentTransaction;
bool userExited = false;
while (!userExited)
{
int mainMenuSelection = ATM::DisplayMenu();
switch((MenuOption)mainMenuSelection)
{
case BALANCE_INQUIRY: dzialalo
case WITHDRAWAL:
case DEPOSIT:
currentTransaction = CreateTransaction(mainMenuSelection);
currentTransaction.Execute();
break;
case EXIT_ATM:
screen.DisplayMessage("Exiting the system\n");
userExited = true;
break;
default:
screen.DisplayMessage("Wrong input, try again\n");
break;
}
}
}
int ATM::DisplayMenu()
{
screen.DisplayMessage("\nMain menu: \n1. - View balance \n2. - Withdraw cash \n3. - Deposit cash \n4. - Exit \nEnter a number:\n");
return keypad.GetInput();
}
Transaction ATM::CreateTransaction(int type)
{
switch((MenuOption)type)
{
case BALANCE_INQUIRY: //MenuOption.BALANCE_INQUIRY gdyby nie dzialalo
BalanceInquiry temp(currentAccountNumber,screen,bankDatabase);
break;
case WITHDRAWAL:
Withdrawal temp(currentAccountNumber,screen,bankDatabase,keypad,cashDispenser);
break;
case DEPOSIT:
Deposit temp(currentAccountNumber,screen,bankDatabase,keypad,depositSlot);
break;
}
return temp;
}
`
私はプロジェクト全体を実行しようとすると、私はこのエラーを取得: ERRORS I GET
は、コンパイラです関数の中で、ATM :: PerformTransactions()は私が作成しようとしているオブジェクトが関数であることを教えてくれますか?どのように可能ですか?そのようなオブジェクトを作成することは可能ではありませんか? Transaction currentTransaction
誰かが間違っていることを教えてもらえますか?私は本当にあなたの助けに感謝します。
エラーメッセージはクリアです。デフォルトコンストラクタはありません。静的なオブジェクトではなく、動的なオブジェクトの作成が必要な場合があります。ポインタ。 –
実際の問題は、C++がC#と同じように動作し、C++コードを書く際のモデルとしてC#を使用していることを前提としています。例えば、 'CreateTransaction'はC++プログラマが書いた方法ではありません。コンパイルした場合、オブジェクトのスライシングの問題が発生します。 – PaulMcKenzie