Ошибки C++ LNK1120 и LNK2019:«неразрешенный внешний символ WinMain@16»
-
12-09-2019 - |
Вопрос
Я пытаюсь выполнить еще одно упражнение из книги Дейтеля.Программа рассчитывает ежемесячные проценты и печатает новые остатки для каждого из вкладчиков.Поскольку упражнение является частью главы, посвященной динамической памяти, я использую операторы «нового» и «удаления».По какой-то причине я получаю эти две ошибки:
ЛНК2019:неразрешенный внешний символ WinMain@16, указанный в функции ___tmainCRTStartup
фатальная ошибка 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;
}
Я потратил час, пытаясь понять это, но безуспешно.
Решение
Перейдите в «Настройки компоновщика -> Система».Измените поле «Подсистема» с «Windows» на «Консоль».
Другие советы
Похоже, вы пишете стандартное консольное приложение (у вас есть int main()
), но компоновщик ожидает найти точку входа в Windows WinMain
.
На страницах свойств вашего проекта в разделе «Компоновщик» в разделе «Система/Подсистема» выбрано ли «Windows (/SUBSYSTEM:WINDOWS)»?Если да, попробуйте изменить его на «Консоль (/SUBSYSTEM:CONSOLE)».
При создании нового проекта выберите «Консольное приложение Win32» вместо «Проект Win32».