2014-04-04 4 views
0

이 오류와 관련하여 도움을 줄 수 있습니까? 저는 C++ 초보자입니다. 그리고 매크로 오류에서 바로 오류가 발생합니다. 그것을 해결하기 위해 무엇을 할 수 있습니까? 또는 어떻게 그것을 근원까지 추적 할 수 있습니까?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 교수. .)

코드 :

// 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);  
} 
+0

에 함수 서명을 변경, CWND에서 CDialog 상속을 것 같아요. 그렇다면 함수 시그니처를 예상되는 시그니처에 고치는 것이 어떻습니까? –

+0

@vlad_tepesch 당신이 의미하는 기능을 가르쳐 주시겠습니까? 그리고 질문의 두 번째 단락을 읽으십시오. C++ 오류에 익숙하지 않습니다. – Bitterblue

답변

3

ON_MESSAGE 매크로 뒤의 코드 ReadCPUparameter은 실제 서명이 다르다는 이유로 'LRESULT (__thiscall CWnd::*)(WPARAM,LPARAM)'.과 같이 다음 서명이 있어야합니다. 두 개의 함수 포인터의 형식이 서로 호환되지 않기 때문에 불평합니다. struct Oranges*struct Apples*이 필요한 함수에 전달하는 것과 같습니다.

은 그래서 당신이 할 일은 내가 오류 메시지가 정확히 잘못이다라고 생각

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

당신은 또한'ON_MESSAGE'는 Windows 메시지에 내 기능을 등록하는 inbuild 매크로라고 말할 수 있습니다. 그것은 내가 모르는 한 가지입니다. 어쨌든 고마워! 나는 그 오류 중 2 개를 풀었고 지금은 더 잘 이해하고 있습니다. 프로젝트가 실제로 컴파일되었습니다. ^^ – Bitterblue

+0

@ mini-me 그 MFC 물건에 대해 아무것도 몰라. 방금 컴파일러 오류 메시지를 읽고 이해했습니다. –

+0

블라드가 문제를 잘 설명했다. VS6 컴파일러는 오류를 감지 할만큼 똑똑하지 않았습니다. –