错误:无法将参数'1'的'std :: basic_string :: iterator…'转换为'const char *…'

问题描述 投票:16回答: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());

有人知道如何解决此问题吗?

c++ compiler-errors char std gnu
1个回答
22
投票

您忘记了#include <algorithm>所在的std::remove。否则,您的编译器将只知道std::remove(我在Visual C ++ 14中遇到相同的错误),它是在间接包含的this std::remove标头中定义的。

编译器之间的不同行为是标准库实现的不同std::remove层次结构的结果。

© www.soinside.com 2019 - 2024. All rights reserved.