Pendant que 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;
}
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?
c++
visual-studio
visual-c++
NAIEM
la source
la source
Réponses:
C'est un problème d'éditeur de liens.
Essayez de modifier Propriétés -> Éditeur de liens -> Système -> Sous-système (dans Visual Studio).
de Windows (/ SUBSYSTEM: WINDOWS) à la console (/ SUBSYSTEM: CONSOLE)
Celui-ci m'a aidé
la source
tWinMain
comme fonction principale, vous devez inclure tchar.h ou le remplacer parWinMain
ouwWinMain
selon que votre application est ou non Unicode. Ne pas le faire entraîne également cette erreur de l'éditeur de liens même avec le sous-système approprié. (/ SUBSYSTEM: WINDOWS)Comme les autres l'ont mentionné, vous pouvez changer le sous-système en console et l'erreur disparaîtra.
Ou si vous souhaitez 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 ce qui suit à Propriétés -> Éditeur de liens -> Ligne de commande :De cette façon, vous vous débarrassez de la fenêtre de la console.
la source
Si vous rencontrez ce problème et que vous utilisez Qt, vous devez lier qtmain.lib ou qtmaind.lib
la source
$(QTDIR)\lib\qtmaind.lib
aux dépendances supplémentaires.CONFIG += console
au.pro
fichier a résolu le problème de mon projet QtEn plus de le changer en
Console (/SUBSYSTEM:CONSOLE)
comme d'autres l'ont dit, vous devrez peut-être changer le point d'entrée dans Propriétés -> Éditeur de liens -> Avancé -> Point d'entrée. Réglez-le sur mainCRTStartup .Il semble que Visual Studio recherche peut-être la fonction WinMain au lieu de main, si vous ne spécifiez pas le contraire.
la source
Inclure
<tchar.h>
ce qui a la ligne:la source
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"
la source
je ne vois pas la fonction principale.
veuillez vous assurer qu'il a la fonction principale.
exemple :
espérons que cela fonctionne bien. :)
la source
main
ne résout rien à cela.main
/WinMain
versions, et si aucune d'elles n'est trouvée, il indique que WinMain @ 16 est introuvable , mais ce message n'est pas exactement correct.Si votre projet est Dll, le cas peut être que l'éditeur de liens souhaite créer un programme de console. Ouvrez les propriétés du projet. Sélectionnez les paramètres généraux. Sélectionnez le type de configuration Dynamic Library (.dll).
la source
.dll
compilateur est toujours en train d'essayer de créer une application Windows.Je ne sais pas où publier cette réponse, mais je pense que c'est le bon endroit. Je suis tombé sur cette même erreur aujourd'hui et la commutation des sous-systèmes n'a rien changé.
Changer les fichiers lib 64 bits en 32 bits (x86) a fait l'affaire pour moi, j'espère que cela aidera quelqu'un là-bas!
la source
Si vous souhaitez réellement utiliser _tWinMain () au lieu de main (), assurez-vous que la configuration pertinente de votre projet a
Dans le fichier c / cpp où _tWinMain () est défini, ajoutez:
#include <Windows.h>
#include <tchar.h>
la source
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
main
fonction, 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 ajouter/c
uniquement pour compiler et non pour lier. Cela produira uniquement un fichier objet, qui doit être lié à une bibliothèque statique ou partagée ou à une application (auquel cas vous aurez besoin d'un fichier oject avec main défini)._WinMain
est le nom de Microsoft pourmain
lors de la liaison.De plus: vous n'exécutez pas encore le code, vous le compilez (et le liez). C ++ n'est pas un langage interprété.
la source
WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
point d'entrée. Cette erreur de l'éditeur de liens indique que le projet est en cours de création pour le sous-système Windows, pas pour le sous-système de la console._WinMain@16
est le symbole décoré du point d'entrée fourni par l'utilisateur appelé par le code de démarrage dans le CRT, lors du ciblage du sous-système Windows. Ce n'est pas "le nom de Microsoft pour lamain
liaison" . Si vous ciblez le sous-système de console, le CRT fourni avec Visual Studio appellera un point d'entrée nommémain
. S'il n'est pas défini, l'éditeur de liens se plaindra d'un symbole appelé_main
.Si vous utilisez CMake, vous pouvez également obtenir cette erreur lorsque vous définissez
SET(GUI_TYPE WIN32)
sur une application console.la source
Les suggestions savantes mentionnées ci-dessus résoudront le problème dans 99,99% des cas. C'était ma chance qu'ils ne l'ont pas fait. Dans mon cas, il s'est avéré que j'incluais un fichier d'en-tête d'un autre projet Windows. Effectivement, tout en bas de ce fichier, j'ai trouvé la directive:
Inutile de dire que la suppression de cette ligne a résolu mon problème.
la source