erreur LNK2019: symbole externe non résolu _WinMain @ 16 référencé dans la fonction ___tmainCRTStartup

Pendant que j’exécute le code simple comme ci-dessous, j’ai deux erreurs comme suit:

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

Les erreurs:

MSVCRTD.lib (crtexew.obj): erreur LNK2019: symbole externe non résolu _WinMain@16 référencé dans la fonction ___tmainCRTStartup

Que devrais-je faire?

Thats un problème de linker.

Essayez de modifier les propriétés -> l’éditeur de liens -> système -> sous-système (dans Visual Studio).

de Windows (/ SUBSYSTEM: WINDOWS) à la console (/ SUBSYSTEM: CONSOLE)

Celui-ci m’a aidé

Comme les autres l’ont mentionné, vous pouvez remplacer le SubSystem par la console et l’erreur disparaîtra.

Ou, si vous voulez conserver le sous-système Windows, vous pouvez simplement indiquer quel est votre point d’entrée, car vous n’avez pas défini ___tmainCRTStartup . Vous pouvez le faire en ajoutant les éléments suivants à Propriétés -> Linker -> Ligne de commande :

/ ENTRY: “mainCRTStartup”

De cette façon, vous vous débarrassez de la fenêtre de la console.

Si vous rencontrez ce problème et utilisez Qt – vous devez lier qtmain.lib ou qtmaind.lib

Inclure qui a la ligne:

 #define _tWinMain wWinMain 

Si vous utilisez le jeu de caractères Unicode, mais que l’entrée n’a pas été définie, vous pouvez spécifier / ENTRY: “wWinMainCRTStartup”

Je ne vois pas la fonction principale.

s’il vous plaît assurez-vous qu’il a la fonction principale.

Exemple :

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

J’espère que ça marche bien. 🙂

Si votre projet est Dll, il se peut que l’éditeur de liens souhaite créer un programme de console. Ouvrez les propriétés du projet. Sélectionnez les parameters généraux. Sélectionnez le type de configuration Dynamic Library (.dll).

Vous avez essayé de transformer ce fichier source en un exécutable, ce qui n’est évidemment pas possible, car le point d’entrée obligatoire, la fonction main , n’est pas défini. Ajoutez un fichier main.cpp et définissez une fonction principale. Si vous travaillez sur la ligne de commande (ce dont je doute), vous pouvez append /c uniquement à la compilation et non au lien. Cela produira un fichier object uniquement, qui doit être lié à une lib statique ou partagée ou à une application (dans ce cas, vous aurez besoin d’un fichier oject avec le principal défini).

_WinMain est le nom de Microsoft pour main lors de la liaison.

Aussi: vous n’exécutez pas encore le code, vous le comstackz (et le liez). C ++ n’est pas un langage interprété.

Je ne sais pas où poster cette réponse, mais je pense que c’est le bon endroit. Je suis tombé sur cette erreur aujourd’hui et le changement de sous-système n’a rien changé.

Changer les fichiers de 64 bits en 32 bits (x86) a fait l’affaire pour moi, j’espère que ça va aider quelqu’un!

En plus de la changer en Console (/SUBSYSTEM:CONSOLE) comme d’autres l’ont dit, vous devrez peut-être modifier le point d’entrée dans Propriétés -> Linker -> Avancé -> Point d’entrée. Définissez-le sur mainCRTStartup .

Il semblerait que Visual Studio recherche la fonction WinMain au lieu de main, si vous ne spécifiez pas autrement.

Si vous utilisez CMake, vous pouvez également obtenir cette erreur lorsque vous définissez SET(GUI_TYPE WIN32) sur une application console.