C++ 遍历指针列表
我试图用以下代码遍历窗口对象指针列表:C++ 遍历指针列表,c++,list,pointers,C++,List,Pointers,我试图用以下代码遍历窗口对象指针列表: auto windowPtr = reinterpret_cast<std::list<Window>*>(lParam); for (std::list<Window*>::const_iterator it = windowPtr.begin(); it != windowPtr.end(); ++it) { if ((*it)->handle == hwnd)
auto windowPtr = reinterpret_cast<std::list<Window>*>(lParam);
for (std::list<Window*>::const_iterator it = windowPtr.begin(); it != windowPtr.end(); ++it)
{
if ((*it)->handle == hwnd)
{
state = true;
}
}
我做错了什么?你在找这样的东西吗
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
std::list<Window*>* windows = reinterpret_cast<std::list<Window*>>(lParam);
bool state = false;
for (std::list<Window*>::const_iterator it = windowPtr->begin(); it != windowPtr->end(); ++it)
{
if ((*it)->handle == hwnd)
{
state = true;
}
}
return TRUE;
}
int main(int argc, char** argv)
{
std::list<Window*> windows;
...
EnumWindows(EnumWindowsProc, (LPARAM)&windows);
}
windowPtr
是指向列表的指针,因此需要使用windowPtr->begin()
。然而,重新解释演员阵容看起来非常可疑。什么是lParam
?您将其强制转换为列表*
(即指针),但随后您使用
尝试访问一个方法使用->
而不是您的强制转换说std::list*
,您的迭代器说std::list
:只有一个字符交换可以生成两种不同的类型。哪一个是错误的?或者它们都是错误的,而您的意思是std::list*
?您能为您的示例提供更多的上下文吗?
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
std::list<Window*>* windows = reinterpret_cast<std::list<Window*>>(lParam);
bool state = false;
for (std::list<Window*>::const_iterator it = windowPtr->begin(); it != windowPtr->end(); ++it)
{
if ((*it)->handle == hwnd)
{
state = true;
}
}
return TRUE;
}
int main(int argc, char** argv)
{
std::list<Window*> windows;
...
EnumWindows(EnumWindowsProc, (LPARAM)&windows);
}
state = std::find(windowPtr->begin(), windowPtr->end(), [=] (Window* w) {return w->handle == hwnd;}) != windowPtr->end();