Sementara saya menjalankan kode sederhana seperti di bawah ini saya memiliki dua kesalahan sebagai berikut:
#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;
}
Kesalahan:
MSVCRTD.lib (crtexew.obj): error LNK2019: simbol eksternal yang tidak terselesaikan
_WinMain@16
dirujuk dalam fungsi___tmainCRTStartup
Apa yang harus saya lakukan?
c++
visual-studio
visual-c++
NAIEM
sumber
sumber
Jawaban:
Itu masalah penghubung.
Cobalah untuk mengubah Properties -> Linker -> System -> SubSystem (dalam Visual Studio).
dari Windows (/ SUBSYSTEM: WINDOWS) ke Console (/ SUBSYSTEM: CONSOLE)
Yang ini membantu saya
sumber
tWinMain
sebagai fungsi utama, Anda harus memasukkan tchar.h atau mengubahnya ke salah satuWinMain
atauwWinMain
tergantung pada apakah aplikasi Anda adalah Unicode atau tidak. Kegagalan untuk melakukannya juga menghasilkan kesalahan penghubung ini bahkan dengan subsistem yang benar. (/ SUBSYSTEM: WINDOWS)Seperti yang disebutkan lainnya, Anda dapat mengubah SubSistem ke Konsol dan kesalahan akan hilang.
Atau jika Anda ingin mempertahankan subsistem Windows, Anda hanya bisa memberi petunjuk pada apa titik masuk Anda, karena Anda belum menentukan
___tmainCRTStartup
. Anda dapat melakukan ini dengan menambahkan berikut ini ke Properti -> Linker -> Baris perintah :Dengan cara ini Anda menyingkirkan jendela konsol.
sumber
Jika Anda mengalami masalah ini dan menggunakan Qt - Anda harus menautkan qtmain.lib atau qtmaind.lib
sumber
$(QTDIR)\lib\qtmaind.lib
ke Dependensi Tambahan.CONFIG += console
ke.pro
file memperbaiki masalah untuk proyek Qt sayaSelain mengubahnya menjadi
Console (/SUBSYSTEM:CONSOLE)
seperti yang dikatakan orang lain, Anda mungkin perlu mengubah titik entri di Properti -> Linker -> Advanced -> Entry Point. Atur ke mainCRTStartup .Tampaknya Visual Studio mungkin mencari fungsi WinMain alih-alih utama, jika Anda tidak menentukan sebaliknya.
sumber
Sertakan
<tchar.h>
yang memiliki garis:sumber
Jika Anda menggunakan Set Karakter Unicode, tetapi entri tidak disetel, Anda dapat menentukan / ENTRY: "wWinMainCRTStartup"
sumber
saya tidak melihat fungsi utama.
pastikan itu memiliki fungsi utama.
contoh:
berharap itu bekerja dengan baik. :)
sumber
main
tidak melakukan apa pun untuk menyelesaikannya.main
/WinMain
versi yang berbeda , dan jika tidak ada yang ditemukan dikatakan WinMain @ 16 tidak ditemukan , tetapi pesan ini tidak sepenuhnya benar.Jika proyek Anda Dll, maka kemungkinan linker ingin membangun program konsol. Buka properti proyek. Pilih pengaturan Umum. Pilih tipe konfigurasi Dynamic Library di sana (.dll).
sumber
.dll
kompiler yang diset masih mencoba untuk membangun aplikasi windows.Saya tidak yakin ke mana harus memposting jawaban saya ini tetapi saya pikir itu adalah tempat yang tepat. Saya menemukan kesalahan ini hari ini dan mengganti subsistem tidak mengubah apa pun.
Mengubah file lib 64bit menjadi 32bit (x86) membantu saya, saya harap ini akan membantu seseorang di luar sana!
sumber
Jika Anda benar-benar ingin menggunakan _tWinMain () alih-alih main () pastikan konfigurasi yang relevan dengan proyek Anda miliki
Dalam file c / cpp di mana _tWinMain () didefinisikan, tambahkan:
#include <Windows.h>
#include <tchar.h>
sumber
Anda mencoba mengubah file sumber menjadi file yang dapat dieksekusi, yang jelas tidak mungkin, karena titik masuk wajib,
main
fungsinya, tidak ditentukan. Tambahkan file main.cpp dan tentukan fungsi utama. Jika Anda bekerja pada commandline (yang saya ragu), Anda dapat menambahkan/c
hanya kompilasi dan bukan tautan. Ini akan menghasilkan file objek saja, yang perlu ditautkan ke statis atau shared lib atau aplikasi (dalam hal ini Anda akan memerlukan file oject dengan didefinisikan utama)._WinMain
adalah nama Microsoft untukmain
saat menautkan.Juga: Anda belum menjalankan kode, Anda sedang mengkompilasi (dan menautkannya). C ++ bukan bahasa yang ditafsirkan.
sumber
WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
titik masuk. Kesalahan tautan ini menunjukkan bahwa proyek sedang dibangun untuk subsistem Windows, bukan subsistem konsol._WinMain@16
adalah simbol dihiasi dari titik masuk yang disediakan pengguna yang disebut oleh kode startup di CRT, ketika menargetkan subsistem Windows. Itu bukan "nama Microsoftmain
ketika menghubungkan" . Jika Anda menargetkan subsistem konsol, CRT yang dikirimkan dengan Visual Studio akan memanggil titik entri bernamamain
. Jika tidak terdefinisi, linker akan mengeluh tentang simbol yang hilang yang disebut_main
.Jika Anda menggunakan CMake, Anda juga bisa mendapatkan kesalahan ini ketika Anda mengatur
SET(GUI_TYPE WIN32)
aplikasi konsol.sumber
Saran ilmiah yang disebutkan di atas akan menyelesaikan masalah di 99,99% dari kasus. Itu adalah keberuntunganku bahwa mereka tidak melakukannya. Dalam kasus saya ternyata saya memasukkan file header dari proyek Windows yang berbeda. Cukup yakin, di bagian paling bawah dari file itu saya menemukan arahan:
Tak perlu dikatakan, menghapus baris ini memecahkan masalah saya.
sumber