2015-12-18 20 views
9

私は次のエラーを取得しています:についてはエラー: 'STDを:: <char>をのbasic_string ::イテレータを...' に変換できません '引数のためのconstのchar * 'に1' ...'

error: cannot convert 'std::basic_string<char>::iterator {aka __gnu_cxx::__normal 
_iterator<char*, std::basic_string<char> >}' to 'const char*' for argument '1' 
to 'int remove(const char*)' 

何らかの理由で、私のプログラムはMacで作業しているときに完全にコンパイルされますが、Linuxマシンを使用すると、このエラーは複数の場所でポップアップします。 (これが発生する理由誰もが説明できるならば、それは素晴らしいことだ!)

はここでエラーがポップアップインスタンスの一つだ:

SomeClass::SomeClass(string t, string art, Time dur) { 
    char chars[] = ","; 
    t.erase(std::remove(t.begin(), t.end(), chars[0]), t.end()); 
    art.erase(std::remove(art.begin(), art.end(), chars[0]), art.end()); 
    // Some more code ... 
} 

は具体的には、エラーがこの行から来ている:

t.erase(std::remove(t.begin(), t.end(), chars[0]), t.end()); 

誰もこの問題にアプローチする方法を知っていますか?

+0

こちら(https://ideone.com/jZh5x5)で作業中です。あなたは[mcve]を作ることができますか? – NathanOliver

+3

正しい削除機能を選択していないので、を含めましたか? (悲しいことに、別のものはにある) – Borgleader

+0

コンパイラのエラーを正しく読んでください。あなたは質問のタイトルの重要な部分を忘れてしまった。これは明らかに呼び出す関数ではない 'int remove(const char *)'を呼び出そうとしていることを伝えます。 –

答えて

15

#include <algorithm>を忘れた場合は、std::removeがあります。それがなければ、あなたのコンパイラはthis std::removeしか知りません(私はVisual C++ 14で同じエラーが発生します)。これは間接的にインクルードされた<cstdio>ヘッダに定義されています。

コンパイラ間の動作が異なるのは、標準ライブラリ実装の異なる#include階層の結果です。

関連する問題