ошибка 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 ]

2 голосов
/ 08 июля 2011

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

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

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

1 голос
/ 13 июля 2015

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

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