我试图将引用变量i_RootPath的值设置为while循环内的其他值(如果您单击相应的按钮)。编译不喜欢我分配i_RootPath的方式。它说:
如何从生成的按钮调用的不同方法中成功更改“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();
}
}
最佳答案
在lambda函数中,使用[=]
值捕获的变量是const
。您似乎正在按值捕获i_RootPath
(以及其他所有内容),因此它是const
。
从您的代码来看,您可能应该使用捕获规范[=,&i_RootPath]
通过引用仅捕获i_RootPath
。
您也可以使用[&]
通过引用捕获所有内容,但是看起来您需要保留currentPath
的恒定副本。在这种情况下,[&,currentPath]
也将起作用。
关于c++ - std::bind函数中没有可行的重载 '=',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30766515/