2016-03-11 101 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();