Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-无法使lambda工作_C++_Qt_C++11_Lambda - Fatal编程技术网

C++ Qt-无法使lambda工作

C++ Qt-无法使lambda工作,c++,qt,c++11,lambda,C++,Qt,C++11,Lambda,我有以下函数,在其中我想将比main\u word长/短的单词中的std::set words删减超过4个字符 void Cluster::prune(QString main_word) { words.erase(std::remove_if(words.begin(), words.end(), [=](QString w){return std::abs(m

我有以下函数,在其中我想将比
main\u word
长/短的单词中的
std::set words
删减超过4个字符

void Cluster::prune(QString main_word)
{
    words.erase(std::remove_if(words.begin(),
                               words.end(),
                               [=](QString w){return std::abs(main_word.length() - w.length()) > 4;}),
                words.end());
}
我在生成时遇到以下错误:

d:\qt\tools\mingw48_32\lib\gcc\i686-w64-mingw32\4.8.0\include\c++\bits\stl_algo.h:1176: błąd: passing 'const QString' as 'this' argument of 'QString& QString::operator=(const QString&)' discards qualifiers [-fpermissive]
             *__result = _GLIBCXX_MOVE(*__first);
                       ^

我有点困惑-这个lambda有什么不对吗?

你不能在集合上使用擦除-删除-如果习惯用法-因为
集合
内部包含
常量K
类型的元素-它们是不可修改的,并且要求对象是可移动的

您必须使用循环:

for (auto it = words.begin(); it != words.end(); /* nothing */)
{
    if (std::abs(main_word.length() - it->length()) > 4) {
        it = words.erase(it);
    }
    else {
        ++it;
    }
}

很有魅力,谢谢!所以这个lambda应该和vector一起工作,对吗?@pkrysiak,对。除此之外,我建议对lambda进行改进:
main_word
w
都应作为参考。照现在的情况,你要多带一些副本。