C ++ LNK1120 e LNK2019 errori: “simbolo esterno non risolto WinMain @ 16”
-
12-09-2019 - |
Domanda
Sto cercando di fare un altro esercizio dal libro di Deitel. Il programma calcola l'interesse mensile e stampa i nuovi equilibri per ciascuno dei risparmiatori. Poiché l'esercizio è parte del capitolo relativo alla memoria dinamica, sto usando "nuovi" operatori e "Cancella". Per qualche ragione, ottengo questi due errori:
LNK2019: simbolo esterno non risolto WinMain @ 16 fa riferimento in funzione ___ tmainCRTStartup
Errore irreversibile LNK1120: esterni non risolti 1
Ecco file di intestazione di classe.
//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;
};
file cpp con definizioni di funzioni membro
//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
Fine finalmente programma del driver:
#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;
}
Ho trascorso un'ora cercando di capire questo fuori senza successo.
Soluzione
Vai a "Impostazioni Linker -> Sistema". Modificare il campo "sottosistema" da "Windows" a "Console".
Altri suggerimenti
Sembra che si sta scrivendo un'applicazione console standard (avete int main()
), ma che il linker si aspetta di trovare un punto di ingresso WinMain
finestre.
In pagine di proprietà del progetto yout, nella sezione Linker, l'opzione System / sottosistema, avete "Windows (/ SUBSYSTEM: WINDOWS)" selezionato? In tal caso, provare a cambiare in "Console (/ SUBSYSTEM: CONSOLE)"
Quando si crea un nuovo progetto, selezionare "applicazione console Win32" invece di "Progetto Win32".