2015-09-29 106 views
0

我正在嘗試創建多個線程來處理單擊任務。現在的Visual Studio 2015年不顯示語法錯誤,但是在編譯我的錯誤錯誤C3867多線程C++

C3867 'action::Chrome::click': non-standard syntax; use '&' to create a pointer to member

int main() 
{ 
    std::unique_ptr<action::Chrome>chrome(new action::Chrome()); 
    const std::vector<uint_16>xLocation = { 1155, 1165, 1205, 1245, 1285 }; 
    std::vector<uint_16>yLocation; 

    //Fill yLocation 
    //Yada yada, other code 

    std::thread task[6]; 
    for(uint_8 i = 0; i < 6; i++)task[i] = std::thread((chrome->click, xLocation, yLocation[i])); 
    for(uint_8 i = 0; i < 6; i++)task[i].join(); 
} 
+0

能否請您發佈的'行動的聲明::鉻:: click'? – HelloWorld

回答

3

你得到一個指針成員函數&action::Chrome::click,不chrome->click

如果傳遞一個指向成員函數的指針,則第二個參數應該是函數被「調用」的對象。

您的參數列表也存在問題;額外的括號意味着你只傳遞yLocation[i]到線程的構造函數。

使用

std::thread(&action::Chrome::click, chrome, xLocation, yLocation[i]); 
+0

謝謝你的解釋和如何解決它。儘管將代碼更改爲您提供的代碼,但通過使用shared_ptr可輕鬆修復的unique_ptr發生錯誤 –