Erro LNK2019: símbolo externo não resolvido _WinMain @ 16 referenciado na function ___tmainCRTStartup

Enquanto eu estou executando o código simples como abaixo, eu tenho dois erros da seguinte forma:

#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; } 

Erros:

MSVCRTD.lib (crtexew.obj): erro LNK2019: símbolo externo não resolvido _WinMain@16 referenciado na function ___tmainCRTStartup

O que devo fazer?

Isso é um problema de linker.

Tente alterar Properties -> Linker -> System -> SubSystem (no Visual Studio).

do Windows (/ SUBSYSTEM: WINDOWS) para o console (/ SUBSYSTEM: CONSOLE)

Este me ajudou

Como os outros mencionaram, você pode alterar o SubSystem para o Console e o erro desaparecerá.

Ou se você quiser manter o subsistema Windows, você pode apenas indicar qual é o seu ponto de input, porque você não definiu ___tmainCRTStartup . Você pode fazer isso adicionando o seguinte em Properties -> Linker -> Command line :

/ ENTRY: “mainCRTStartup”

Desta forma, você se livrar da janela do console.

Se você está tendo este problema e está usando o Qt – você precisa vincular qtmain.lib ou qtmaind.lib

Inclua que tem a linha:

 #define _tWinMain wWinMain 

Se você usar o conjunto de caracteres Unicode, mas a input não foi definida, você pode especificar / ENTRY: “wWinMainCRTStartup”

Eu não vejo a function principal.

por favor, certifique-se de que tem a function principal.

exemplo:

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

espero que funcione bem. 🙂

Se o seu projeto for Dll, o caso pode ser que o vinculador queira criar um programa de console. Abra as propriedades do projeto. Selecione as configurações gerais. Selecione o tipo de configuração Dynamic Library there (.dll).

Você tentou transformar esse arquivo de origem em um executável, o que obviamente não é possível, porque o ponto de input obrigatório, a function main , não está definido. Adicione um arquivo main.cpp e defina uma function principal. Se você está trabalhando na linha de comando (o que duvido), você pode adicionar /c para apenas compilar e não vincular. Isso produzirá apenas um arquivo de object, que precisa ser vinculado a uma biblioteca estática ou compartilhada ou a um aplicativo (nesse caso, você precisará de um arquivo de object com o principal definido).

_WinMain é o nome da Microsoft para main quando liga.

Além disso, você não está executando o código ainda, você está compilando (e vinculando). C ++ não é uma linguagem interpretada.

Não sei ao certo onde postar essa resposta, mas acho que é o lugar certo. Eu me deparei com este mesmo erro hoje e mudar os subsistemas não mudou nada.

Mudando os arquivos de lib de 64 bits para 32 bits (x86) fez o truque para mim, espero que ajude alguém lá fora!

Além de alterá-lo para o Console (/SUBSYSTEM:CONSOLE) como já foi dito, talvez seja necessário alterar o ponto de input em Properties -> Linker -> Advanced -> Entry Point. Defina como mainCRTStartup .

Parece que o Visual Studio pode estar procurando a function WinMain em vez de principal, se você não especificar de outra forma.

Se você estiver usando o CMake, você também pode obter esse erro ao definir SET(GUI_TYPE WIN32) em um aplicativo de console.