错误 C2440:“static_cast”:无法从“void (__thiscall Visualizza::*)(char [])”转换为“AFX_PMSG”
Posted
技术标签:
【中文标题】错误 C2440:“static_cast”:无法从“void (__thiscall Visualizza::*)(char [])”转换为“AFX_PMSG”【英文标题】:error C2440: 'static_cast' : cannot convert from 'void (__thiscall Visualizza::* )(char [])' to 'AFX_PMSG' 【发布时间】:2020-12-01 12:36:07 【问题描述】:有人可以帮助我吗? 我正在通过 VS 2010 Ultimate 做一个 MFC 应用程序。 附言。我是 C++ 的新手。 此应用程序用于在组合框文件名上打印。
这是 .cpp 文件
BEGIN_MESSAGE_MAP(Visualizza, CDialogEx)
ON_CBN_SELCHANGE(IDC_COMBO1, &Visualizza::OnCbnSelchangeCombo1)
END_MESSAGE_MAP()
// Visualizza message handlers
void Visualizza::OnCbnSelchangeCombo1(char util[20])
std::string s = util;
LPTSTR x = new TCHAR[s.size() + 1];
stampa.AddString(x);
这是.h文件
#pragma once
#include "afxwin.h"
// Visualizza dialog
class Visualizza : public CDialogEx
DECLARE_DYNAMIC(Visualizza)
public:
Visualizza(CWnd* pParent = NULL); // standard constructor
virtual ~Visualizza();
// Dialog Data
enum IDD = IDD_DIALOG1 ;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnCbnSelchangeCombo1(char util[20]);
CComboBox stampa;
;
【问题讨论】:
在哪一行发现错误? 正确的原型是afx_msg void OnCbnSelchangeCombo1()
- 没有参数。如果更改选择将项目添加到组合框中也会非常令人惊讶,因此您可能应该重新考虑您的方法。
这里的错误是 ON_CBN_SELCHANGE(IDC_COMBO1, &Visualizza::OnCbnSelchangeCombo1)
@molbdnilo 我该怎么办?
使用具有适当原型的函数。您可能还应该多学习,少猜测。
【参考方案1】:
CComboBox
文档的Remarks 部分解释了注册通知处理程序。尤其需要遵守以下几点:
父函数原型如下:
afx_msg void memberFxn( );
换句话说:您的用户提供的通知处理程序不能接受任何参数。
void Visualizza::OnCbnSelchangeCombo1(char util[20])
需要改成
void Visualizza::OnCbnSelchangeCombo1()
使其与ON_CBN_SELCHANGE(IDC_COMBO1, &Visualizza::OnCbnSelchangeCombo1)
消息映射条目兼容。
【讨论】:
以及如何从组合框中获取新选择的项目? @dia 作为documented,您可以使用GetLBText
。如果您对所选索引感兴趣,请致电CComboBox::GetCurSel。以上是关于错误 C2440:“static_cast”:无法从“void (__thiscall Visualizza::*)(char [])”转换为“AFX_PMSG”的主要内容,如果未能解决你的问题,请参考以下文章
错误 C2440:“static_cast”:无法从“void (__thiscall Visualizza::*)(char [])”转换为“AFX_PMSG”
error C2440: “static_cast”: 无法从“void (__thiscall CMainFrame::* )
VS 2010 中的 C++ 中的 static_cast 无法从 void* 转换为 size_t 错误