errore LNK2019: simbolo esterno non risolto _WinMain @ 16 di riferimento nella funzione ___tmainCRTStartup

Mentre sto eseguendo il semplice codice come sotto ho due errori come segue:

#include  #include  using namespace::std; template  class Stack { public: Stack (int max):stack(new Type[max]), top(-1), maxsize(max){} ~Stack (void) {delete []stack;} void Push (Type &val); void Pop (void) {if (top>=0) --top;} Type& Top (void) {return stack[top];} //friend ostream& operator<< (ostream&, Stack&); private: Type *stack; int top; const int maxSize; }; template  void Stack :: Push (Type &val) { if (top+1<maxsize) stack [++top]=val; } 

Errori:

MSVCRTD.lib (crtexew.obj): errore LNK2019: simbolo esterno non risolto _WinMain@16 riferimento nella funzione ___tmainCRTStartup

Cosa dovrei fare?

Questo è un problema di linker.

Prova a cambiare Proprietà -> Linker -> Sistema -> Sottosistema (in Visual Studio).

da Windows (/ SUBSYSTEM: WINDOWS) a Console (/ SUBSYSTEM: CONSOLE)

Questo mi ha aiutato

Come gli altri hanno menzionato, puoi cambiare il sottosistema in console e l’errore andrà via.

Oppure, se vuoi mantenere il sottosistema di Windows, puoi solo suggerire quale sia il tuo punto di ingresso, perché non hai definito ___tmainCRTStartup . Puoi farlo aggiungendo quanto segue a Proprietà -> Linker -> Riga di comando :

/ INGRESSO: “mainCRTStartup”

In questo modo ti libererai della finestra della console.

Se si verifica questo problema e si utilizza Qt, è necessario colbind qtmain.lib o qtmaind.lib

Includi che ha la linea:

 #define _tWinMain wWinMain 

Se si utilizza il set di caratteri Unicode, ma la voce non è stata impostata, è ansible specificare / ENTRY: “wWinMainCRTStartup”

non vedo la funzione principale.

per favore assicurati che abbia la funzione principale.

esempio :

 int main(int argc, TCHAR *argv[]){ } 

spero che funzioni bene. 🙂

Se il progetto è Dll, il caso potrebbe essere che il linker desideri creare un programma di console. Apri le proprietà del progetto. Seleziona le impostazioni generali. Seleziona il tipo di configurazione Libreria dynamic lì (.dll).

Hai provato a trasformare quel file sorgente in un eseguibile, che ovviamente non è ansible, perché il punto di ingresso obbligatorio, la funzione main , non è definito. Aggiungi un file main.cpp e definisci una funzione principale. Se stai lavorando sulla riga di comando (che dubito), puoi aggiungere /c per compilare e non solo linkare. Questo produrrà solo un file object, che deve essere collegato in una lib di tipo statico o condiviso o un’applicazione (nel qual caso avrai bisogno di un file di oject con la definizione principale).

_WinMain è il nome di Microsoft per main durante il collegamento.

Inoltre: non stai ancora eseguendo il codice, lo stai compilando (e collegandolo). Il C ++ non è una lingua interpretata.

Non sono sicuro di dove pubblicare questa mia risposta, ma penso che sia il posto giusto. Oggi mi sono imbattuto in questo errore e cambiare i sottosistemi non ha cambiato nulla.

Cambiare i file lib a 64 bit a 32 bit (x86) ha fatto il trucco per me, spero che possa aiutare qualcuno là fuori!

Oltre a cambiarlo in Console (/SUBSYSTEM:CONSOLE) come altri hanno detto, potrebbe essere necessario modificare il punto di ingresso in Proprietà -> Linker -> Avanzate -> Punto di ingresso. Impostalo su mainCRTStartup .

Sembra che Visual Studio potrebbe cercare la funzione WinMain invece di main, se non si specifica diversamente.

Se si sta utilizzando CMake, è ansible ottenere questo errore anche quando si imposta SET(GUI_TYPE WIN32) su un’applicazione console.