ошибка LNK2019: неразрешенный внешний символ _WinMain @ 16, указанный в функции ___tmainCRTStartup - PullRequest
134 голосов
/ 08 июля 2011

Пока я выполняю простой код, как показано ниже, у меня есть две ошибки:

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

Ошибка:

MSVCRTD.lib (crtexew.obj): ошибка LNK2019: неразрешенный внешний символ _WinMain@16, указанный в функции ___tmainCRTStartup

Что мне делать?

Ответы [ 12 ]

340 голосов
/ 16 декабря 2011

Это проблема компоновщика.

Попробуйте изменить Свойства -> Компоновщик -> Система -> Подсистема (в Visual Studio).

из Windows (/ SUBSYSTEM: WINDOWS) до Консоль (/ SUBSYSTEM: CONSOLE)

Этот мне помог

79 голосов
/ 04 января 2012

Как уже упоминалось, вы можете изменить Подсистему на Консоль, и ошибка исчезнет.

Или, если вы хотите сохранить подсистему Windows, вы можете просто намекнуть, какова ваша точка входа, поскольку вы не определили ___tmainCRTStartup. Вы можете сделать это, добавив следующее в Свойства -> Линкер -> Командная строка :

/ ENTRY: "mainCRTStartup"

Таким образом вы избавляетесь от окна консоли.

9 голосов
/ 05 марта 2015

Если у вас возникла эта проблема и вы используете Qt - вам нужно связать qtmain.lib или qtmaind.lib

8 голосов
/ 13 октября 2013

Включить <tchar.h>, в котором есть строка:

#define _tWinMain wWinMain
7 голосов
/ 04 апреля 2017

Помимо изменения на Console (/SUBSYSTEM:CONSOLE), как уже говорили другие, вам может потребоваться изменить точку входа в Свойствах -> Линкер -> Дополнительно -> Точка входа. Установите mainCRTStartup .

Кажется, что Visual Studio может искать функцию WinMain вместо main, если вы не укажете иное.

6 голосов
/ 01 мая 2012

Если вы используете набор символов Unicode, но запись не была установлена, вы можете указать / ENTRY: "wWinMainCRTStartup"

4 голосов
/ 08 февраля 2012

я не вижу основной функции.

пожалуйста, убедитесь, что она имеет главную функцию.

пример:

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

}

надеюсь, что она работает хорошо.:)

3 голосов
/ 23 июня 2014

Если ваш проект Dll, то может быть так, что компоновщик хочет создать консольную программу.Откройте свойства проекта.Выберите Общие настройки.Выберите там тип конфигурации Dynamic Library (.dll).

2 голосов
/ 26 марта 2019

Если вы действительно хотите использовать _tWinMain () вместо main () , убедитесь, что соответствующая конфигурация вашего проекта имеет

  1. Linker-> System -> Подсистема => Windows (/ SUBSYSTEM: WINDOWS)
  2. C / C ++ -> Препроцессор -> Определения препроцессора => Заменить _CONSOLE на _WINDOWS
  3. В файле c / cpp, где _tWinMain () определено, добавьте:

    #include <Windows.h> #include <tchar.h>

2 голосов
/ 14 июля 2015

Я не уверен, где разместить этот мой ответ, но я думаю, что это правильное место.Сегодня я столкнулся с этой самой ошибкой, и переключение подсистем ничего не изменило.

Изменение 64-битных файлов lib на 32bit (x86) помогло мне, надеюсь, это кому-нибудь поможет!1003 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...