Ответ 1
Это проблема компоновщика.
Попробуйте изменить Properties → Linker → System → SubSystem (в Visual Studio).
из Windows (/SUBSYSTEM: WINDOWS) в консоль (/SUBSYSTEM: CONSOLE)
Пока я запускаю простой код, как показано ниже, у меня есть две ошибки:
#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
Что мне делать?
Это проблема компоновщика.
Попробуйте изменить Properties → Linker → System → SubSystem (в Visual Studio).
из Windows (/SUBSYSTEM: WINDOWS) в консоль (/SUBSYSTEM: CONSOLE)
Как упоминалось выше, вы можете изменить SubSystem на Console, и ошибка исчезнет.
Или, если вы хотите сохранить подсистему Windows, вы можете просто намекнуть на то, что ваша точка входа, потому что вы не определили ___tmainCRTStartup
. Вы можете сделать это, добавив следующее в свойства → Линкера → Командная строка:
/ENTRY: "mainCRTStartup"
Таким образом вы избавитесь от окна консоли.
Если у вас есть эта проблема и вы используете Qt - вам нужно связать qtmain.lib или qtmaind.lib
Если вы используете набор символов Unicode, но запись не была установлена, вы можете указать /ENTRY: "wWinMainCRTStartup"
Включить <tchar.h>
, который имеет строку:
#define _tWinMain wWinMain
Я не вижу основной функции.
убедитесь, что у него есть основная функция.
пример:
int main(int argc, TCHAR *argv[]){
}
надеемся, что он будет работать хорошо.:)
Вы пытались превратить исходный файл в исполняемый файл, что, очевидно, невозможно, поскольку обязательная точка входа, функция main
не определена. Добавьте файл main.cpp и определите основную функцию. Если вы работаете над командной строкой (что я сомневаюсь), вы можете добавить /c
только для компиляции, а не для ссылки. Это приведет к созданию только объектного файла, который необходимо связать как с статикой, так и с общей библиотекой lib или приложением (в этом случае вам понадобится файл oject с основным значением).
_WinMain
- это имя Microsoft для main
при связывании.
Кроме того: вы еще не используете код, вы компилируете (и привязываете) его. С++ не является интерпретированным языком.
Если ваш проект - Dll, тогда дело может заключаться в том, что компоновщик хочет создать консольную программу. Откройте свойства проекта. Выберите Общие настройки. Выберите тип конфигурации Dynamic Library там (.dll).
Если вы используете CMake, вы также можете получить эту ошибку, когда вы устанавливаете SET(GUI_TYPE WIN32)
в консольном приложении.
Я не знаю, где разместить этот ответ, но я думаю, что это место. Сегодня я столкнулся с этой самой ошибкой, и переключение подсистем ничего не изменило.
Изменение 64-битных файлов lib на 32-битный (x86) сделало трюк для меня, я надеюсь, что это поможет кому-то там!
Помимо изменения его на Console (/SUBSYSTEM:CONSOLE)
, как говорили другие, вам может потребоваться изменить точку входа в свойствах → компоновщик → расширенный → точка входа. Установите mainCRTStartup.
Кажется, что Visual Studio может искать функцию WinMain вместо main, если вы не указали иначе.