c++ fatal - errore LNK2019:simbolo esterno non risolto _WinMain @ 16 di riferimento nella funzione ___tmainCRTStartup




lnk1120 esterni (10)

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

#include <iostream>
#include <string>
using namespace::std;

template <class Type>
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 <class Type>
void Stack <Type>:: Push (Type &val)
{
    if (top+1<maxsize)
        stack [++top]=val;
}

Errori:

MSVCRTD.lib (crtexew.obj): errore LNK2019: simbolo esterno non risolto [email protected] riferimento nella funzione ___tmainCRTStartup

Cosa dovrei fare?


Answers

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


Includi <tchar.h> che ha la linea:

#define _tWinMain wWinMain

non vedo la funzione principale.

per favore assicurati che abbia la funzione principale.

esempio :

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

}

spero che funzioni bene. :)


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!


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.


Hai provato a trasformare quel file sorgente in un eseguibile, che ovviamente non è possibile, 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 oggetto, 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.


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


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


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.


La mia installazione di Visual Studio 2010 ha la colonna "User-unhandled":

modificare

Da VS2008 Debugger non si infrange sull'eccezione non gestita ...

A quanto pare, se non hai "Abilita solo il mio codice (solo gestito)" selezionato nelle opzioni Debug, la colonna "Utente non gestito" non viene visualizzata nella finestra di dialogo "Eccezioni".





c++ visual-studio visual-c++