gpt4 book ai didi

c++ - C++ 中的转换错误

转载 作者:行者123 更新时间:2023-11-28 00:31:14 30 4
gpt4 key购买 nike

有人可以帮我解决这个错误吗?我是 C++ 新手。而且似乎错误发生在一堆宏中。我能做些什么来解决它?或者我怎样才能追查到源头?

我不太明白这个错误。这是否意味着编译器试图将方法 void ReadCPUparameter() 转换为 LRESULT funcName(WPARAM wParam, LPARAM lParam) 函数头?

错误:

// error C2440: 'static_cast' : cannot convert from
// 'void (__thiscall CStartup::* )(void)' to
// 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'.
//
// ON_MESSAGE(WM_UPLOAD_CPU_PARAMETER,ReadCPUparameter) // error here

(这不是我写的,我需要在Win7机器上从Win2000重新编译一个旧项目。旧VS6.0项目-> VS2010 Prof.)

代码:

// class CStartup : public CDialog {};

#include "stdafx.h"
#include "MU.h"
#include "Startup.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CStartup::CStartup(CWnd* pParent /*=NULL*/) : CDialog(CStartup::IDD, pParent)
{
p_p = &cpu_par;
}

void CStartup::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CStartup, CDialog)
ON_WM_SHOWWINDOW()
ON_MESSAGE(WM_UPLOAD_CPU_PARAMETER,ReadCPUparameter) // error here
END_MESSAGE_MAP()

const int nLanguageIds_Language[] =
{
// ...
};


#define MAX_READINGS 200

BOOL CStartup::OnInitDialog()
{
// ...
}

void CStartup::OnOK()
{
CDialog::OnOK();
}

int CStartup::Check_OnRead()
{
// ...
}

void CStartup::ReadCPUparameter()
{
// ...
}

void CStartup::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
PostMessage( WM_UPLOAD_CPU_PARAMETER );
}

最佳答案

ON_MESSAGE 宏背后的代码期望 ReadCPUparameter 具有以下签名:'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'. 由于实际签名不同,它提示两个函数指针的类型不兼容。这就像将 struct Oranges* 传递给需要 struct Apples* 的函数。

我想 CDialog 继承自 CWND,所以您只需将函数签名更改为

LRESULT Startup::ReadCPUparameter(WPARAM wparam, LPARAM lparam);

关于c++ - C++ 中的转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22861084/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com