2015-09-29 110 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发生错误 –