2016-03-11 82 views
-1

我试图通过Window对象的指针,此代码列表进行迭代的列表:迭代通过指针

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; 
     } 
    } 

但我得到一个错误标记windowPtr.begin()windowPtr.end()说:

std::list<Window> *windowPtr Error: expression must have class type 

我在这里做错了什么?

+4

'windowPtr'是一个指向一个列表,所以你需要使用'windowPtr->开始()'。但是,'reinterpret_cast'看起来真的很可疑。什么是'lParam'? – TartanLlama

+2

你将它转换为一个'清单 *'(即一个指针),但是你用'.'试图访问一个方法用' - >'而不是 – user463035818

+0

谢谢,我已经改变了它一个 - >但现在我得到一个新的错误说没有合适的转换从 ..我真的不知道什么问题是.. – ColdZer0

回答

0

这是你要找的东西吗?

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

,或者你可以使用一些STD功能

state = std::find(windowPtr->begin(), windowPtr->end(), [=] (Window* w) {return w->handle == hwnd;}) != windowPtr->end();