※ 引述《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。