错误 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 错误

如何使用 MFC 工具提示的示例代码修复错误?

错误 C2440:“=”:无法从“const char *”转换为“char *”

由于从 C 到 C++ 的类型转换,无法编译并出现错误 C2440