2015-06-10 73 views
2

我想將引用變量i_RootPath的值設置爲while循環內的不同值,如果您單擊相應的按鈕。編譯不像我分配i_RootPath的方式。它說:在std :: bind函數中沒有可行的重載'='

沒有可行的重載「=」

我怎樣才能成功地從所產生的按鈕調用不同的方法中改變「i_RootPath」的價值?

void NodeViewApp::AddToolbar(boost::filesystem::path& i_RootPath) { 

    boost::filesystem::path currentPath = i_RootPath; 

    while(currentPath.has_root_path()){ 
     WPushButton* currentButton = new WPushButton("myfile.txt"); 

     currentButton->clicked().connect(std::bind([=]() { 
      i_RootPath = currentPath; 
     })); 
     currentPath = currentPath.parent_path(); 
    } 
} 
+1

該綁定看起來完全冗餘 – sehe

回答

5

在lambda函數,由值與[=]捕獲變量是const。您似乎按價值捕獲了i_RootPath(以及其他所有內容),因此它是const

根據您的代碼判斷,您應該使用捕獲規範[=,&i_RootPath]來僅通過引用捕獲i_RootPath

您也可以使用[&]通過引用捕獲所有內容,但看起來您需要保留currentPath的恆定副本。在這種情況下,[&,currentPath]也可以工作。

相關問題