Пока я запускаю простой код, показанный ниже, у меня есть две следующие ошибки:
#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
Что я должен делать?
c++
visual-studio
visual-c++
NAIEM
источник
источник
Ответы:
Это проблема компоновщика.
Попробуйте изменить Properties -> Linker -> System -> SubSystem (в Visual Studio).
из Windows (/ SUBSYSTEM: WINDOWS) в консоль (/ SUBSYSTEM: CONSOLE)
Это помогло мне
источник
tWinMain
качестве основной функции, вы должны включить tchar.h или изменить его на любойWinMain
или вwWinMain
зависимости от того, поддерживает ли ваше приложение Unicode. Несоблюдение этого правила также приводит к ошибке компоновщика даже с правильной подсистемой. (/ SUBSYSTEM: WINDOWS)Как уже упоминалось, вы можете изменить подсистему на консоль, и ошибка исчезнет.
Или, если вы хотите сохранить подсистему Windows, вы можете просто намекнуть, какая у вас точка входа, потому что вы еще не определили ее
___tmainCRTStartup
. Вы можете сделать это, добавив следующее в Свойства -> Компоновщик -> Командная строка :Таким образом вы избавитесь от окна консоли.
источник
Если у вас возникла эта проблема и вы используете Qt - вам необходимо связать qtmain.lib или qtmaind.lib
источник
$(QTDIR)\lib\qtmaind.lib
в дополнительные зависимости.CONFIG += console
в.pro
файлПомимо изменения его на,
Console (/SUBSYSTEM:CONSOLE)
как говорили другие, вам может потребоваться изменить точку входа в Properties -> Linker -> Advanced -> Entry Point. Установите значение mainCRTStartup .Кажется, что Visual Studio может искать функцию WinMain вместо main, если вы не укажете иное.
источник
Включить, в
<tchar.h>
котором есть строка:#define _tWinMain wWinMain
источник
Если вы используете набор символов Unicode, но запись не была установлена, вы можете указать / ENTRY: "wWinMainCRTStartup"
источник
я не вижу основной функции.
убедитесь, что у него есть основная функция.
пример :
int main(int argc, TCHAR *argv[]){ }
надеюсь, что он работает хорошо. :)
источник
main
ничего не решает.main
/WinMain
версии, и если ни одна из них не найдена, он сообщает, что WinMain @ 16 не найден , но это сообщение не совсем правильное.Если ваш проект - Dll, возможно, компоновщик хочет создать консольную программу. Откройте свойства проекта. Выберите Общие настройки. Выберите там тип конфигурации Dynamic Library (.dll).
источник
.dll
установленный компилятор все еще пытается создать приложение для Windows.Я не уверен, где разместить этот свой ответ, но я думаю, что это подходящее место. Сегодня я столкнулся с этой самой ошибкой, и переключение подсистем ничего не изменило.
Изменение 64-битных файлов lib на 32-битные (x86) помогло мне, я надеюсь, что это поможет кому-то там!
источник
Если вы действительно хотите использовать _tWinMain () вместо main (), убедитесь, что в соответствующей конфигурации вашего проекта есть
В файле c / cpp, где определена _tWinMain () , добавьте:
#include <Windows.h>
#include <tchar.h>
источник
Вы пытались превратить этот исходный файл в исполняемый файл, что, очевидно, невозможно, потому что обязательная точка входа,
main
функция, не определена. Добавьте файл main.cpp и определите главную функцию. Если вы работаете с командной строкой (в чем я сомневаюсь), вы можете добавить/c
только для компиляции, а не для ссылки. Это создаст только объектный файл, который необходимо связать либо со статической, либо с общей библиотекой, либо с приложением (в этом случае вам понадобится файл oject с определенным main)._WinMain
- это имя Microsoftmain
при связывании.Также: вы еще не запускаете код, вы его компилируете (и связываете). C ++ не является интерпретируемым языком.
источник
WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
точка входа. Эта ошибка компоновщика указывает на то, что проект создается для подсистемы Windows, а не для подсистемы консоли._WinMain@16
- это украшенный символ предоставленной пользователем точки входа, вызываемой кодом запуска в CRT при нацеливании на подсистему Windows. Это не «имя Microsoftmain
при создании ссылок» . Если вы нацеливаетесь на подсистему консоли, CRT, поставляемый с Visual Studio, будет вызывать точку входа с именемmain
. Если не определено, компоновщик пожалуется на отсутствующий символ с именем_main
.Если вы используете CMake, вы также можете получить эту ошибку при установке
SET(GUI_TYPE WIN32)
в консольном приложении.источник
Упомянутые выше предложения эрудитов решат проблему в 99,99% случаев. Мне повезло, что они этого не сделали. В моем случае оказалось, что я включил файл заголовка из другого проекта Windows. Конечно же, в самом низу этого файла я нашел директиву:
#pragma comment(linker, "/subsystem:Windows")
Излишне говорить, что удаление этой строки решило мою проблему.
источник