在 VS2022 + EasyX 20240601(目前的最新版)的环境下测试下面的代码:
#include <easyx.h>
class MyClass : public IMAGE
{
};
int main()
{
MyClass o;
return 0;
}
将会报错:
1>main.obj : error LNK2001: 无法解析的外部符号 "private: virtual void __cdecl IMAGE::SetDefault(void)" (?SetDefault@IMAGE@@EEAAXXZ)
必须将代码改成下面这样:
#include <easyx.h>
class MyClass : public IMAGE
{
public:
void SetDefault() override {}
};
int main()
{
MyClass o;
return 0;
}
即重写 SetDefault 函数,才能解决报错。但似乎在 MinGW 版本的 EasyX 中无此问题。
由于 SetDefault 被声明为 IMAGE 的 private 函数,且不是纯虚函数,所以继承 IMAGE 时本不应该重写 SetDefault,所以我认为这可能是 EasyX 的 BUG。