1

文字列から空白を削除しようとしています。しかし、エラーがスローされました。

私のコードが間違っていたパラメータはどれですか..見てくれてありがとう

私の主な機能

#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)
4

2 に答える 2

3

name の関数が 2 つあるため、このエラーが発生しましたisspace

  1. localeヘッダー、名前空間 stdで定義:

    template<class charT>
    bool std::isspace(charT ch, const locale& loc);
    
  2. cctypeヘッダー、グローバル名前空間で定義:

    int isspace( int ch );
    

したがって、2 番目の関数を使用する場合は、次の 2 つの方法があります。

  1. 使用しないでくださいusing namespace std。私はそれが好きです。
  2. グローバル名前空間::で定義された関数を呼び出すために使用します

    remove_if(myText.begin(), myText.end(), ::isspace)
    //                                      ^^
    
于 2013-04-13T08:21:20.300 に答える
0

以下に詳細な説明がいくつかあります。

関数テンプレート remove_if のインスタンスが引数リストと一致しません

要約すると、 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;
}
于 2013-04-13T08:25:57.003 に答える