尝试删除空格时remove_if throw错误

时间:2013-04-13 07:58:16

标签: c++

我正在尝试从字符串中删除空格。但是错了。

我的代码做错了哪个参数..感谢您的回复

我的主要功能

#include <algorithm>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;


int main()
{
    string myText;
    myText = readText("file.txt");
    myText.erase(remove_if(myText.begin(), myText.end(), isspace), myText.end());
    cout << myText << endl;

    return 0;
}

下面是我尝试编译时出现的错误。

encrypt.cpp: In function ‘int main()’:
encrypt.cpp:70:70: error: no matching function for call to ‘remove_if(std::basic_string<char>::iterator, std::basic_string<char>::iterator, <unresolved overloaded function type>)’
encrypt.cpp:70:70: note: candidate is:
/usr/include/c++/4.6/bits/stl_algo.h:1131:5: note: template<class _FIter, class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate)

2 个答案:

答案 0 :(得分:3)

您收到此错误,因为有两个名为isspace的函数。

  1. locale标头中定义,命名空间标准

    template<class charT>
    bool std::isspace(charT ch, const locale& loc);
    
  2. cctype标头中定义,全局命名空间

    int isspace( int ch );
    
  3. 所以,如果你想使用第二个功能,你有两种方法:

    1. 请勿使用using namespace std。我更喜欢它。
    2. 使用::调用全局命名空间中定义的函数

      remove_if(myText.begin(), myText.end(), ::isspace)
      //                                      ^^
      

答案 1 :(得分:0)

有几个详细的解释:

No instance of function template remove_if matches argument list

总之,isspace对编译器来说是不明显的。我宁愿命令不使用它。

以下代码适用于G ++ 4.7.2

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

bool isSpace(const char& c)
{
    return !!::isspace(c);
}

int main()
{
    string text("aaa bbb ccc");
    text.erase(remove_if(text.begin(), text.end(), isSpace), text.end());
    cout << text << endl;
    return 0;
}