※ 引述《easterday (....)》之銘言:
: 自問自答:
: 現在我的進度到這裡:https://tinyurl.com/2atpsmkh
: 編起來就是有錯誤訊息
: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
: textbox.o:textbox.cpp:(.rdata$.refptr._ZTV10MyTextCtrl[.refptr._ZTV10MyTextCtrl]+0x0):
: undefined reference to `vtable for MyTextCtrl'
: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
: C:/msys64/mingw64/lib/libmingw32.a(lib64_libmingw32_a-crtexewin.o): in
: function `main':
: C:/M/B/src/mingw-w64/mingw-w64-crt/crt/crtexewin.c:67:(.text.startup+0xbd):
: undefined reference to `WinMain'
: collect2.exe: error: ld returned 1 exit status
: make: *** [Makefile:11: CH3.exe] Error 1
: 有人肯幫忙看看嗎?
首先我想問的是:既然你是在 Windows 上編譯,有一定要用 MinGW 嗎?
以 wxWidgets 來說,我覺得用 Visual Studio 問題會比較少。
至少你遇到的那兩個問題,我覺得都跟 linker or 函式庫有關。
如果你想用 Visual Studio setup 開發環境的話,我之前有寫過一份簡單的文件,
可以參考一下:https://hackmd.io/@closer/BJrq8PcNP
回到你的程式碼。
我在 Visual Studio 的環境中編譯你的 .cpp,其實只有一個問題。
就是你在 class MyTextCtrl 的宣告中,加入了 DECLARE_DYNAMIC_CLASS 這個巨集。
你只要拿掉那一行,就能編譯了。
此時我要再問一個問題:你知道這個 dynamic class 是做什麼用的嗎?
你有需要用嗎?
依據這篇文章:https://docs.wxwidgets.org/trunk/overview_rtti.html
DECLARE/IMPLEMENT_DYNAMIC_CLASS 是用來產生 wxWidgets 自己實作的 RTTI 用的。
我個人(至少在使用 wxWidgets 時)從來沒使用過 wxWidgets 自己的 RTTI。
所以如果你沒有特別需求,DECLARE_DYNAMIC_CLASS 那一行是不需要的。
若是你真的需要 wxWidgets 的 RTTI,那麼,依照上面那篇文章,你需要:
1. 在 class 宣告中加入 DECLARE_DYNAMIC_CLASS(也就是你的 Line 8)
2. 在 class 的定義中(Line 64 前後吧)加入 IMPLEMENT_DYNAMIC_CLASS 巨集
3. 為 MyTextCtrl 宣告並實作 default constructor(也就是不帶參數的 ctor)
你只做了 1,少了 2 & 3。