7

私はデイテルの本から別の運動をしようとしています。プログラムは毎月の利息を計算し、各セーバーの新しい残高を印刷します。演習は動的メモリに関連する章の一部であるため、「new」および「delete」演算子を使用しています。何らかの理由で、次の2つのエラーが発生します。

LNK2019:関数___tmainCRTStartupで参照される未解決の外部シンボルWinMain @ 16

致命的なエラーLNK1120:1つの未解決の外観

これがクラスヘッダーファイルです。

//SavingsAccount.h
//Header file for class SavingsAccount

class SavingsAccount
{
public:
    static double annualInterestRate;

    SavingsAccount(double amount=0);//default constructor intialize  
                                        //to 0 if no argument

  double getBalance() const;//returns pointer to current balance
  double calculateMonthlyInterest();
  static void modifyInterestRate(double interestRate):

  ~SavingsAccount();//destructor

private:
    double *savingsBalance;
};

メンバー関数定義を含むCppファイル

//SavingsAccount class defintion
#include "SavingsAccount.h"

double SavingsAccount::annualInterestRate=0;//define and intialize static data
                                        //member at file scope


SavingsAccount::SavingsAccount(double amount)
:savingsBalance(new double(amount))//intialize savingsBalance to point to new object
{//empty body
}//end of constructor

double SavingsAccount::getBalance()const
{
    return *savingsBalance;
}

double SavingsAccount::calculateMonthlyInterest()
{
    double monthlyInterest=((*savingsBalance)*annualInterestRate)/12;

    *savingsBalance=*savingsBalance+monthlyInterest;

    return monthlyInterest;
}

void SavingsAccount::modifyInterestRate(double interestRate)
{
    annualInterestRate=interestRate;
}

SavingsAccount::~SavingsAccount()
{
    delete savingsBalance;
}//end of destructor

最後にドライバープログラムを終了します:

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

using namespace std;

int main()
{
SavingsAccount saver1(2000.0);
SavingsAccount saver2(3000.0);

SavingsAccount::modifyInterestRate(0.03);//set interest rate to 3%

cout<<"Saver1 monthly interest: "<<saver1.calculateMonthlyInterest()<<endl;
cout<<"Saver2 monthly interest: "<<saver2.calculateMonthlyInterest()<<endl;

cout<<"Saver1 balance: "<<saver2.getBalance()<<endl;
cout<<"Saver1 balance: "<<saver2.getBalance()<<endl;

return 0;
}

私はこれを理解しようとして1時間費やしましたが、成功しませんでした。

4

3 に答える 3

9

「リンカー設定->システム」に移動します。フィールド「サブシステム」を「Windows」から「コンソール」に変更します。

于 2009-08-09T19:42:10.433 に答える
3

あなたは標準のコンソールアプリケーションを書いているように見えますが(あなたは持っていますint main())、リンカはWindowsのエントリポイントを見つけることを期待していますWinMain

youtプロジェクトのプロパティページの[リンカー]セクションの[システム/サブシステム]オプションで、[Windows(/ SUBSYSTEM:WINDOWS)]が選択されていますか?その場合は、「コンソール(/ SUBSYSTEM:CONSOLE)」に変更してみてください。

于 2009-08-09T19:45:01.753 に答える
2

新しいプロジェクトを作成するときは、「Win32プロジェクト」ではなく「Win32コンソールアプリケーション」を選択してください。

于 2009-08-09T19:41:24.977 に答える