wxWidgets 3.1.2 和 Connect 方法的 C++ 构建错误

问题描述 投票:0回答:1

我在 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。

令人失望的是,仅编译其他项目时,相同的代码没有错误。

我应该在哪里解决这个问题?

视觉工作室中有关于演员表的全局选项吗?

c++ visual-studio-2017 wxwidgets eventhandler
1个回答
0
投票

您的代码中至少有一个问题,您必须使用

wxSocketEventHandler
而不是
wxObjectEventFunction

我也强烈建议使用

Bind()
而不是
Connect()
,它只是为了向后兼容而提供的,使用后者比前者没有任何优势,并且使用
Bind()
的情况相当多:值得注意的是,你根本不需要使用任何类型转换。

最后,您还应该使用最新的稳定版 3.2,而不是 5 年前的 3.1.3。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.