165 votes

erreur LNK2019 : unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

Lorsque j'exécute le code simple comme ci-dessous, j'ai deux erreurs comme suit :

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

Erreurs :

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

Que dois-je faire ?

1 votes

C'est tout le code ? Où est votre fonction principale ?

4 votes

Il semble également que le type de projet soit mal défini. L'erreur du linker concernant WinMain implique que vous avez essayé de créer un projet Win32. Si vous voulez juste quelque chose pour sortir du texte à l'invite de commande, essayez de changer le type de projet en Console.

4 votes

À propos, si vous obtenez des erreurs de compilation/liaison, vous n'êtes pas en train d'"exécuter" le code.

403voto

Bohdan Points 1882

C'est un problème de linker.

Essayez de modifier Propriétés -> Linker -> Système -> Sous-système (dans Visual Studio).

de Windows (/SUBSYSTEM:Windows) à Console (/SUBSYSTEM:CONSOLE)

Celui-ci m'a aidé

4 votes

J'ai le même problème. Votre réponse ne m'aide pas. Une autre suggestion ?

1 votes

J'ai eu ce problème en utilisant MS Visual Studio. Si votre environnement est différent, vous devrez peut-être le résoudre différemment. Mais cela devrait toujours être un problème d'éditeur de liens.

3 votes

Si vous utilisez tWinMain comme votre fonction principale, vous devez inclure tchar.h ou le changer en WinMain o wWinMain selon que votre application est Unicode ou non. Si vous ne le faites pas, vous obtiendrez cette erreur de liaison, même avec le sous-système correct. (/SUBSYSTEM:Windows)

93voto

Morten Kristensen Points 4071

Comme les autres l'ont mentionné, vous pouvez changer le sous-système en Console et l'erreur disparaîtra.

Ou si vous voulez garder le sous-système Windows, vous pouvez juste donner une idée de ce qu'est votre point d'entrée, parce que vous n'avez pas encore défini ___tmainCRTStartup . Vous pouvez le faire en ajoutant ce qui suit à Propriétés -> Linker -> Ligne de commande :

/ENTRY : "mainCRTStartup"

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

3 votes

+1 : "De cette façon, vous vous débarrassez de la fenêtre de la console." - Cool ! J'ai appris quelque chose de nouveau aujourd'hui !

1 votes

+1 pour le conseil, j'ai essayé de comprendre cela pendant 20 minutes, puisque avec SFML je peux juste spécifier le sous-système Windows, avec GLFW c'est évidemment différent donc merci (=)

10voto

zaki Points 58

Inclure <tchar.h> qui a la ligne :

#define _tWinMain wWinMain

9voto

Petronius Points 79

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".

0 votes

C'est un sauveur de vie pour moi ! J'utilisais cmake + mfc (unicode)

4voto

jefry da gucci Points 51

Je ne vois pas la fonction principale.

veuillez vous assurer qu'il a la fonction principale.

exemple :

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

}

J'espère que cela fonctionne bien :)

1 votes

Cela n'aide pas. L'éditeur de liens se plaint d'une valeur non définie. WinMain point d'entrée. La définition d'un point d'entrée appelé main ne fait rien pour résoudre ce problème.

0 votes

L'éditeur de liens essaie de résoudre différents main / WinMain et si aucune d'entre elles n'est trouvée, il indique WinMain@16 non trouvé mais ce message n'est pas tout à fait correct.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X