错误:无法将'std :: basic_string <char> :: iterator ...'转换为'const char*for argument'1'...'

ano*_*ous 14 c++ gnu compiler-errors std char

我收到以下错误:

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*)'
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当我在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 ...
}
Run Code Online (Sandbox Code Playgroud)

更具体地说,错误来自这一行:

t.erase(std::remove(t.begin(), t.end(), chars[0]), t.end());
Run Code Online (Sandbox Code Playgroud)

有谁知道如何处理这个问题?

Log*_*uff 20

你忘了#include <algorithm>,std::remove位于哪里.没有它,你的编译器只知道这个std::remove(我得到与Visual C++ 14相同的错误),这是在间接包含的<cstdio>头中定义的.

编译器之间的不同行为是#include标准库实现的不同层次结构的结果.