Enquanto estou executando o código simples, como abaixo, tenho dois erros, como a seguir:
#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;
}
Erros:
MSVCRTD.lib (crtexew.obj): erro LNK2019: símbolo externo não resolvido
_WinMain@16
mencionado na função___tmainCRTStartup
O que devo fazer?
c++
visual-studio
visual-c++
NAIEM
fonte
fonte
Respostas:
Isso é um problema do vinculador.
Tente alterar Propriedades -> Vinculador -> Sistema -> Subsistema (no Visual Studio).
do Windows (/ SUBSYSTEM: WINDOWS) para o Console (/ SUBSYSTEM: CONSOLE)
Este me ajudou
fonte
tWinMain
como sua principal função, inclua tchar.h ou altere-o para umWinMain
ouwWinMain
dependendo de seu aplicativo ser ou não Unicode. Falha ao fazer isso também gera esse erro do vinculador, mesmo com o subsistema correto. (/ SUBSISTEMA: WINDOWS)Como os outros mencionados, você pode alterar o Subsistema para Console e o erro desaparecerá.
Ou, se você deseja manter o subsistema Windows, basta sugerir qual é o seu ponto de entrada, porque você não definiu
___tmainCRTStartup
. Você pode fazer isso adicionando o seguinte a Propriedades -> Vinculador -> Linha de comando :Dessa forma, você se livra da janela do console.
fonte
Se você está tendo esse problema e está usando o Qt - é necessário vincular qtmain.lib ou qtmaind.lib
fonte
$(QTDIR)\lib\qtmaind.lib
a dependências adicionais.CONFIG += console
ao.pro
arquivo corrigiu o problema do meu projeto QtAlém de alterá-lo para
Console (/SUBSYSTEM:CONSOLE)
como já foi dito, pode ser necessário alterar o ponto de entrada em Propriedades -> Vinculador -> Avançado -> Ponto de entrada. Defina-o como mainCRTStartup .Parece que o Visual Studio pode estar procurando a função WinMain em vez de main, se você não especificar o contrário.
fonte
Inclua
<tchar.h>
qual tem a linha:fonte
Se você usar o Conjunto de Caracteres Unicode, mas a entrada não estiver definida, poderá especificar / ENTRY: "wWinMainCRTStartup"
fonte
não vejo a função principal.
por favor, verifique se ele tem a função principal.
exemplo:
espero que funcione bem. :)
fonte
main
não ajuda a resolver isso.main
/WinMain
versões e, se nenhuma delas for encontrada, diz WinMain @ 16 não encontrado , mas esta mensagem não está exatamente correta.Se o seu projeto for Dll, é possível que o vinculador deseje criar um programa de console. Abra as propriedades do projeto. Selecione as configurações gerais. Selecione o tipo de configuração Biblioteca Dinâmica lá (.dll).
fonte
.dll
compilador definido ainda esteja tentando criar o aplicativo do Windows.Não sei onde postar esta resposta, mas acho que é o lugar certo. Hoje me deparei com esse mesmo erro e a troca de subsistemas não mudou nada.
Alterar os arquivos lib de 64 bits para 32 bits (x86) fez o truque para mim, espero que ajude alguém por aí!
fonte
Se você realmente deseja usar _tWinMain () em vez de main (), verifique se a configuração relevante do seu projeto possui
No arquivo c / cpp em que _tWinMain () está definido, adicione:
#include <Windows.h>
#include <tchar.h>
fonte
Você tentou transformar esse arquivo de origem em um executável, o que obviamente não é possível, porque o ponto de entrada obrigatório, a
main
função, não está definido. Adicione um arquivo main.cpp e defina uma função principal. Se você estiver trabalhando na linha de comando (o que duvido), você pode adicionar/c
apenas à compilação e não ao link. Isso produzirá apenas um arquivo de objeto, que precisa ser vinculado a uma lib estática ou compartilhada ou a um aplicativo (nesse caso, você precisará de um arquivo oject com o principal definido)._WinMain
é o nome da Microsoft paramain
quando vincular.Além disso: você ainda não está executando o código, está compilando (e vinculando). C ++ não é uma linguagem interpretada.
fonte
WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
ponto de entrada. Esse erro do vinculador indica que o projeto está sendo criado para o subsistema Windows, não para o subsistema do console._WinMain@16
é o símbolo decorado do ponto de entrada fornecido pelo usuário chamado pelo código de inicialização no CRT, ao direcionar para o subsistema Windows. Não é "o nome da Microsoft paramain
quando vincular" . Se você direcionar o subsistema do console, o CRT fornecido com o Visual Studio chamará um ponto de entrada chamadomain
. Se indefinido, o vinculador reclamará de um símbolo ausente chamado_main
.Se você estiver usando o CMake, também poderá receber esse erro ao definir
SET(GUI_TYPE WIN32)
um aplicativo de console.fonte
As sugestões eruditas mencionadas acima resolverão o problema em 99,99% dos casos. Foi a minha sorte que eles não fizeram. No meu caso, eu estava incluindo um arquivo de cabeçalho de um projeto diferente do Windows. Com certeza, na parte inferior desse arquivo, encontrei a diretiva:
Escusado será dizer que remover essa linha resolveu meu problema.
fonte