C ++ erreurs LNK1120 et LNK2019: « symbole externe non résolu WinMain @ 16 »
-
12-09-2019 - |
Question
Je suis en train de faire un autre exercice du livre de Deitel. Le programme calcule l'intérêt mensuel et imprime les nouveaux équilibres pour chacun des épargnants. Comme l'exercice fait partie du chapitre relatif à la mémoire dynamique, je suis en utilisant les opérateurs « nouveaux » et « supprimer ». Pour une raison quelconque, je reçois ces deux erreurs:
LNK2019: symbole externe non résolu WinMain @ 16 référencé dans la fonction ___ tmainCRTStartup
LNK1120 d'erreur fatale: 1 externes non résolus
est le fichier d'en-tête de la 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;
};
fichier Cpp avec des définitions de fonctions de membre
//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
Fin finalement programme pilote:
#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;
}
J'ai passé une heure à essayer de comprendre cela sans succès.
La solution
Allez dans "Paramètres Linker -> Système". Modifiez le champ "sous-système" de "Windows" à "Console".
Autres conseils
Il semble que vous écrivez une application standard de la console (vous avez int main()
), mais que l'éditeur de liens s'attend à trouver un point d'entrée de fenêtres WinMain
.
Dans les pages de propriétés du projet yout, dans la section Linker, l'option System / SubSystem, avez-vous "Windows (/ SUBSYSTEM: WINDOWS)" sélectionné? Si oui, essayez de le changer à "Console (/ SUBSYSTEM: CONSOLE)"
Lors de la création d'un nouveau projet, sélectionnez "Console Win32 Application" au lieu de "Projet Win32".