Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 遍历指针列表_C++_List_Pointers - Fatal编程技术网

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();