我正在尝试从Deitel的书中再做一次练习。该程序计算每月利息并打印每个储户的新余额。由于练习是与动态内存相关的章节的一部分,我使用的是“new”和“delete”运算符。出于某种原因,我得到了这两个错误:
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;
}
我花了一个小时试图解决这个问题但没有成功。
答案 0 :(得分:9)
转到“链接器设置 - &gt;系统”。将“子系统”字段从“Windows”更改为“控制台”。
答案 1 :(得分:3)
看起来您正在编写标准控制台应用程序(您有int main()
),但链接器期望找到一个Windows入口点WinMain
。
在yout项目的属性页面中,在Linker部分的System / SubSystem选项中,是否选择了“Windows(/ SUBSYSTEM:WINDOWS)”?如果是,请尝试将其更改为“Console(/ SUBSYSTEM:CONSOLE)”
答案 2 :(得分:2)
创建新项目时,选择“Win32控制台应用程序”而不是“Win32项目”。