Ошибки C ++ LNK1120 и LNK2019: «неразрешенный внешний символ WinMain @ 16» - PullRequest
7 голосов
/ 09 августа 2009

Я пытаюсь сделать еще одно упражнение из книги Дейтеля. Программа рассчитывает ежемесячный процент и печатает новые сальдо для каждого из вкладчиков. Поскольку упражнение является частью главы, связанной с динамической памятью, я использую операторы «new» и «delete». Почему-то я получаю эти две ошибки:

LNK2019: неразрешенный внешний символ 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;
}

Я потратил час, пытаясь понять это безуспешно.

Ответы [ 3 ]

9 голосов
/ 09 августа 2009

Зайдите в «Настройки компоновщика -> Система». Измените поле «Подсистема» с «Windows» на «Консоль».

3 голосов
/ 09 августа 2009

Похоже, что вы пишете стандартное консольное приложение (у вас есть int main()), но компоновщик ожидает найти точку входа Windows WinMain.

На страницах свойств вашего проекта в разделе «Компоновщик», параметр «Система / Подсистема», выбрано ли «Windows (/ SUBSYSTEM: WINDOWS)»? Если это так, попробуйте изменить его на «Консоль (/ SUBSYSTEM: CONSOLE)»

2 голосов
/ 09 августа 2009

При создании нового проекта выберите «Консольное приложение Win32» вместо «Проект Win32».

...