我试图将引用变量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/

10-10 07:59