Подтвердить что ты не робот

Ошибка LNK2019: нерешенный внешний символ _WinMain @16, указанный в функции ___tmainCRTStartup

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

#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: неразрешенный внешний символ [email protected], указанный в функции ___tmainCRTStartup

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

4b9b3361

Ответ 1

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

Попробуйте изменить Properties → Linker → System → SubSystem (в Visual Studio).

из Windows (/SUBSYSTEM: WINDOWS) в консоль (/SUBSYSTEM: CONSOLE)

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

Ответ 2

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

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

/ENTRY: "mainCRTStartup"

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

#define _tWinMain wWinMain

Ответ 6

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

убедитесь, что у него есть основная функция.

пример:

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

}

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

Ответ 7

Вы пытались превратить исходный файл в исполняемый файл, что, очевидно, невозможно, поскольку обязательная точка входа, функция main не определена. Добавьте файл main.cpp и определите основную функцию. Если вы работаете над командной строкой (что я сомневаюсь), вы можете добавить /c только для компиляции, а не для ссылки. Это приведет к созданию только объектного файла, который необходимо связать как с статикой, так и с общей библиотекой lib или приложением (в этом случае вам понадобится файл oject с основным значением).

_WinMain - это имя Microsoft для main при связывании.

Кроме того: вы еще не используете код, вы компилируете (и привязываете) его. С++ не является интерпретированным языком.

Ответ 8

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

Ответ 9

Если вы используете CMake, вы также можете получить эту ошибку, когда вы устанавливаете SET(GUI_TYPE WIN32) в консольном приложении.

Ответ 10

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

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

Ответ 11

Помимо изменения его на Console (/SUBSYSTEM:CONSOLE), как говорили другие, вам может потребоваться изменить точку входа в свойствах → компоновщик → расширенный → точка входа. Установите mainCRTStartup.

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