C ++ LNK1120 und LNK2019 Fehler: „nicht aufgelöstes externes Symbol WinMain @ 16“
-
12-09-2019 - |
Frage
Ich versuche, eine andere Übung von Deitel Buch zu tun. Das Programm berechnet die monatlichen Zinsen und druckt die neuen Salden für jede der Sparer. Da die Übung Teil des Kapitels im Zusammenhang mit dynamischen Speichern, ich bin mit „neuen“ und Operatoren „löschen“. Aus irgendeinem Grund bekomme ich diese zwei Fehler:
LNK2019: nicht aufgelöstes externes Symbol WinMain @ 16 in Funktion verwiesen ___ tmainCRTStartup
schwerwiegender Fehler LNK1120: 1 nicht aufgelöste externe
Hier ist Klassenheaderdatei.
//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-Datei mit den Mitgliedsfunktionsdefinitionen
//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
Ende schließlich Treiberprogramm:
#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;
}
Ich habe eine Stunde lang versucht, dies ohne Erfolg zu verstehen.
Lösung
Gehen Sie auf "Linkers Einstellungen -> System". Ändern Sie das Feld "Subsystem" von "Windows" auf "Console".
Andere Tipps
Es sieht aus wie Sie eine Standard-Konsole Anwendung schreiben (Sie haben int main()
), aber dass der Linker erwartet ein Fenster Einstiegspunkt WinMain
zu finden.
In yout Projekteigenschaftsseite, im Linker Abschnitt, System / SubSystem Option, haben Sie "Windows (/ SUBSYSTEM: WINDOWS)" ausgewählt? Wenn ja, versuchen Ändern Sie ihn auf "Console (/ SUBSYSTEM: CONSOLE)"
Wenn Sie ein neues Projekt zu erstellen, wählen Sie „Win32-Konsolenanwendung“ anstelle von „Win32-Projekt“.