Fehler LNK2019: nicht aufgetriggerses externes Symbol _WinMain @ 16, auf das in der function ___tmainCRTStartup verwiesen wird

Während ich den einfachen Code wie unten ausgeführt habe, habe ich zwei Fehler wie folgt:

#include  #include  using namespace::std; template  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  void Stack :: Push (Type &val) { if (top+1<maxsize) stack [++top]=val; } 

Fehler:

MSVCRTD.lib (crtexew.obj): Fehler LNK2019: nicht aufgetriggerses externes Symbol _WinMain@16 auf das in der function ___tmainCRTStartup

Was soll ich machen?

Das ist ein Linker-Problem.

Versuchen Sie, Eigenschaften -> Linker -> System -> SubSystem (in Visual Studio) zu ändern.

von Windows (/ SUBSYSTEM: WINDOWS) zu Konsole (/ SUBSYSTEM: CONSOLE)

Dieser hat mir geholfen

Wie die anderen erwähnten können Sie das Subsystem in Console ändern und der Fehler wird verschwinden.

Oder wenn Sie das Windows-Subsystem ___tmainCRTStartup möchten, können Sie einfach ___tmainCRTStartup was Ihr Einstiegspunkt ist, weil Sie ___tmainCRTStartup nicht definiert ___tmainCRTStartup . Sie können dies tun, indem Sie Eigenschaften -> Linker -> Befehlszeile hinzufügen:

/ EINTRAG: “mainCRTStartup”

Auf diese Weise werden Sie das Konsolenfenster los.

Wenn Sie dieses Problem haben und Qt verwenden, müssen Sie qtmain.lib oder qtmaind.lib verknüpfen

das die Zeile enthält:

 #define _tWinMain wWinMain 

Wenn Sie Unicode-Zeichensatz verwenden, der Eintrag jedoch nicht festgelegt wurde, können Sie / ENTRY: “wWinMainCRTStartup” angeben.

Ich sehe die Hauptfunktion nicht.

Bitte stellen Sie sicher, dass es Hauptfunktion hat.

Beispiel:

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

hoffe, dass es gut funktioniert. 🙂

Wenn Ihr Projekt Dll ist, könnte der Fall sein, dass der Linker ein Konsolenprogramm erstellen möchte. Öffnen Sie die Projekteigenschaften. Wählen Sie die allgemeinen Einstellungen. Wählen Sie dort den Konfigurationstyp Dynamic Library (.dll).

Sie haben versucht, diese Quelldatei in eine ausführbare Datei umzuwandeln, was natürlich nicht möglich ist, weil der obligatorische Einstiegspunkt, die Hauptfunktion, nicht definiert ist. Fügen Sie eine Datei main.cpp hinzu und definieren Sie eine Hauptfunktion. Wenn Sie an der Befehlszeile arbeiten (was ich bezweifle), können Sie /c hinzufügen, /c nur zu kompilieren und nicht zu verknüpfen. Dadurch wird nur eine Objektdatei erzeugt, die entweder in eine statische oder eine gemeinsam genutzte Lib oder eine Anwendung eingebunden werden muss (in diesem Fall benötigen Sie eine Ojektdatei mit definiertem Hauptverzeichnis).

_WinMain ist Microsofts Name für main beim Linken.

Außerdem: Sie führen den Code noch nicht aus, Sie kompilieren ihn (und verknüpfen ihn). C ++ ist keine interpretierte Sprache.

Ich bin mir nicht sicher, wo ich diese Antwort posten soll, aber ich denke, es ist der richtige Ort. Ich bin heute auf diesen Fehler gestoßen und das Umschalten der Subsysteme hat nichts geändert.

Das Ändern der 64-Bit-Lib-Dateien auf 32 Bit (x86) hat den Trick für mich bewirkt, ich hoffe, es wird jemandem da draußen helfen!

Abgesehen davon, dass Sie es in Console (/SUBSYSTEM:CONSOLE) haben, wie andere gesagt haben, müssen Sie möglicherweise den Einstiegspunkt unter Eigenschaften -> Linker -> Erweitert -> Einstiegspunkt ändern. Stellen Sie es auf ” holeCRTStartup” ein .

Es scheint, dass Visual Studio möglicherweise nach der WinMain-function anstelle von main sucht, wenn Sie nicht anders angeben.

Wenn Sie CMake verwenden, können Sie diesen Fehler auch erhalten, wenn Sie SET(GUI_TYPE WIN32) in einer Konsolenanwendung SET(GUI_TYPE WIN32) .