JBe*_*ley 1 c++ winapi casting compiler-errors visual-studio-2010
我有如下课程:
#include <Windows.h>
class MyClass
{
void A();
static BOOL CALLBACK proc(HWND hwnd, LPARAM lParam);
};
void MyClass::A()
{
EnumChildWindows(GetDesktopWindow(), MyClass::proc, static_cast<LPARAM>(this));
}
BOOL CALLBACK MyClass::proc(HWND hwnd, LPARAM lParam)
{
// ...
return TRUE;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在Visual C++ 2010中编译它时,我得到以下编译器错误:
错误C2440:'static_cast':无法从'MyClass*const'转换为'LPARAM'没有可以进行此转换的上下文
如果我更改MyClass::A
如下定义,则编译成功:
void MyClass::A()
{
EnumChildWindows(GetDesktopWindow(), MyClass::proc, (LPARAM)this);
}
Run Code Online (Sandbox Code Playgroud)
第一个例子中错误的解释是什么?
您需要使用a reinterpret_cast
而不是static_cast
执行转换为完全不相关的类型.请参阅此应何时使用static_cast,dynamic_cast,const_cast和reinterpret_cast?有关不同类型的C++强制转换的更多详细信息.
static_cast
用于转换相关类型,例如int
tofloat
和double
to float
,或不需要太多努力的转换,例如调用单参数构造函数,或调用用户定义的转换函数。
LPARAM
并且this
几乎不相关,所以你需要的是reinterpret_cast
:
LPARAM lparam = reinterpret_cast<LPARAM>(this);
EnumChildWindows(GetDesktopWindow(), MyClass::proc, lparam);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2662 次 |
最近记录: |