Mientras estoy ejecutando el código simple como se muestra a continuación, tengo dos errores como los siguientes:
#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;
}
Errores:
MSVCRTD.lib (crtexew.obj): error LNK2019: símbolo externo sin resolver al que se hace
_WinMain@16
referencia en la función___tmainCRTStartup
¿Qué tengo que hacer?
c++
visual-studio
visual-c++
NAIEM
fuente
fuente
Respuestas:
Eso es un problema de enlazador.
Intente cambiar Propiedades -> Enlace -> Sistema -> Subsistema (en Visual Studio).
desde Windows (/ SUBSYSTEM: WINDOWS) a la consola (/ SUBSYSTEM: CONSOLE)
Este me ayudo
fuente
tWinMain
su función principal, debe incluir tchar.h o cambiarlo a cualquieraWinMain
owWinMain
dependiendo de si su aplicación es Unicode o no. De lo contrario, también se produce este error de enlazador incluso con el subsistema correcto. (/ SUBSISTEMA: VENTANAS)Como los otros mencionaron, puede cambiar el subsistema a la consola y el error desaparecerá.
O si desea mantener el subsistema de Windows, puede indicar cuál es su punto de entrada, porque no lo ha definido
___tmainCRTStartup
. Puede hacer esto agregando lo siguiente a Propiedades -> Vinculador -> Línea de comando :De esta manera te deshaces de la ventana de la consola.
fuente
Si tiene este problema y está usando Qt, debe vincular qtmain.lib o qtmaind.lib
fuente
$(QTDIR)\lib\qtmaind.lib
a dependencias adicionales.CONFIG += console
al.pro
archivo solucionó el problema para mi proyecto QtAdemás de cambiarlo a
Console (/SUBSYSTEM:CONSOLE)
como han dicho otros, es posible que deba cambiar el punto de entrada en Propiedades -> Vinculador -> Avanzado -> Punto de entrada. Ajústelo a mainCRTStartup .Parece que Visual Studio podría estar buscando la función WinMain en lugar de main, si no especifica lo contrario.
fuente
Incluya
<tchar.h>
cuál tiene la línea:fuente
Si usa el juego de caracteres Unicode, pero la entrada no se configuró, puede especificar / ENTRY: "wWinMainCRTStartup"
fuente
No veo la función principal.
asegúrese de que tenga la función principal.
ejemplo:
Espero que funcione bien. :)
fuente
main
no hace nada para resolver eso.main
/WinMain
versiones diferentes , y si no se encuentra ninguna de ellas, dice WinMain @ 16 no encontrado , pero este mensaje no es exactamente correcto.Si su proyecto es Dll, entonces el caso podría ser que el enlazador desea construir un programa de consola. Abra las propiedades del proyecto. Seleccione la configuración general. Seleccione el tipo de configuración Biblioteca dinámica allí (.dll).
fuente
.dll
compilador establecido todavía está tratando de construir la aplicación de Windows.No estoy seguro de dónde publicar esta respuesta, pero creo que es el lugar correcto. Encontré este mismo error hoy y cambiar los subsistemas no cambió nada.
Cambiar los archivos lib de 64 bits a 32 bits (x86) me sirvió, ¡espero que ayude a alguien!
fuente
Si realmente desea utilizar _tWinMain () en lugar de main (), asegúrese de que la configuración relevante de su proyecto tenga
En el archivo c / cpp donde se define _tWinMain () , agregue:
#include <Windows.h>
#include <tchar.h>
fuente
Intentaste convertir ese archivo fuente en un ejecutable, lo que obviamente no es posible, porque el punto de entrada obligatorio, la
main
función, no está definida. Agregue un archivo main.cpp y defina una función principal. Si está trabajando en la línea de comandos (lo cual dudo), puede agregar/c
solo compilar y no vincular. Esto producirá solo un archivo de objeto, que debe vincularse a una biblioteca estática o compartida o una aplicación (en cuyo caso necesitará un archivo de expulsión con el principal definido)._WinMain
es el nombre de Microsoft paramain
cuando se vincula.Además: todavía no está ejecutando el código, lo está compilando (y vinculando). C ++ no es un lenguaje interpretado.
fuente
WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
punto de entrada. Este error de vinculador indica que el proyecto se está creando para el subsistema de Windows, no para el subsistema de consola._WinMain@16
es el símbolo decorado del punto de entrada proporcionado por el usuario llamado por el código de inicio en el CRT, cuando se dirige al subsistema de Windows. No es "el nombre de Microsoft paramain
cuando se vincula" . Si apunta al subsistema de la consola, el CRT que se incluye con Visual Studio llamará a un punto de entrada llamadomain
. Si no está definido, el enlazador se quejará de un símbolo faltante llamado_main
.Si está utilizando CMake, también puede obtener este error cuando configura
SET(GUI_TYPE WIN32)
una aplicación de consola.fuente
Las sugerencias eruditas mencionadas anteriormente resolverán el problema en el 99.99% de los casos. Fue mi suerte que no lo hicieron. En mi caso resultó que estaba incluyendo un archivo de encabezado de un proyecto de Windows diferente. Efectivamente, al final de ese archivo encontré la directiva:
No hace falta decir que eliminar esta línea resolvió mi problema.
fuente