我在 x86 机器上使用 Visual studio 2017,应用程序适用于 32 位。
wxWidgets 版本 3.1.2;
我在另一个文件夹下复制了一个项目作为新项目的基础,并且一旦删除了所有无用的项目,我在新项目中完全相同的代码部分上出现了一些错误,而没有错误在原著中。
t_mainform->Connect(C_SERVER_ID_APP, wxEVT_SOCKET, (wxObjectEventFunction)&TcpIP::OnServerGPRSEvent, (wxObject*)NULL, (wxEvtHandler*)this);
...
// event function
void TcpIP::OnServerGPRSEvent(wxSocketEvent& event)
{
...
}
报告错误:
错误 C2440 '类型转换':无法从 'void (__thiscall TcpIP::* )(wxSocketEvent &)' 转换为 'wxObjectEventFunction'
错误 C2664 'void wxEvtHandler::Connect(wxEventType,wxObjectEventFunction,wxObject *,wxEvtHandler *)':无法将 'wxObject *' 的参数 3 转换为 'wxEventType'*
我已将项目属性设置为与原始值相同的值,尝试了许多不同形式的参数列表,但没有任何效果。我也尝试过Bind方法,但还是一样。
我尝试了绑定方法,将事件类型更改为(wxCommandEvent 和 wxEVT_MENU 事件类型,这可以工作,但我仍然想使用 wxSocketEvent。
令人失望的是,仅编译其他项目时,相同的代码没有错误。
我应该在哪里解决这个问题?
视觉工作室中有关于演员表的全局选项吗?
您的代码中至少有一个问题,您必须使用
wxSocketEventHandler
而不是 wxObjectEventFunction
。
我也强烈建议使用
Bind()
而不是 Connect()
,它只是为了向后兼容而提供的,使用后者比前者没有任何优势,并且使用 Bind()
的情况相当多:值得注意的是,你根本不需要使用任何类型转换。
最后,您还应该使用最新的稳定版 3.2,而不是 5 年前的 3.1.3。