相关疑难解决方法(0)

std :: remove_if和std :: isspace - 编译时错误

我有以下代码:

#include <algorithm>
#include <cctype>
#include <string>

int main()
{
    std::string str;
    str.erase(std::remove_if(str.begin(), str.end(), std::isspace), str.end());
}
Run Code Online (Sandbox Code Playgroud)

MSVC-11.0编译此代码没有任何错误,但gcc 4.7.2给出了以下错误:

main.cpp: In function ‘int main()’:
main.cpp:8:66: error: no matching function for call to ‘remove_if(std::basic_string<char>::iterator, std::basic_string<char>::iterator, <unresolved overloaded function type>)’
main.cpp:8:66: note: candidate is:
In file included from /usr/include/c++/4.7/algorithm:63:0,
                 from main.cpp:1:
/usr/include/c++/4.7/bits/stl_algo.h:1160:5: note: template<class _FIter, class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate)
/usr/include/c++/4.7/bits/stl_algo.h:1160:5: note:   template argument deduction/substitution failed:
main.cpp:8:66: note:   couldn't deduce template parameter ‘_Predicate’
Run Code Online (Sandbox Code Playgroud)

我发现了这个问题,但根据cppreference,没有任何版本的函数接受两个参数.我也发现了这个问题,但根据cppreference(是的,再次),我看到只有一个std :: …

c++ gcc g++

12
推荐指数
2
解决办法
4521
查看次数

标签 统计

c++ ×1

g++ ×1

gcc ×1