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

时间:2015-12-18 18:16:29

标签: c++ compiler-errors char std gnu

我收到以下错误:

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());

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:19)

您忘记#include <algorithm>,其中std::remove位于<cstdio>。没有它,你的编译器只知道this std::remove(我得到与Visual C ++ 14相同的错误),这是在间接包含的#include标题中定义的。

编译器之间的不同行为是标准库实现的不同<?php require_once ("config.php"); $array = array(); $res = mysqli_query($con, "SELECT * FROM sensors WHERE vera_variable='CurrentTemperature'"); while ($row = mysqli_fetch_array($res)) { $sensor_id = $row['sensor_id']; $sensor_name = $row['sensor_name']; $res2 = mysqli_query($con, "SELECT * FROM logs WHERE sensor_id='$sensor_id'"); while ($row2 = mysqli_fetch_array($res2)) { $time = strtotime($row2['log_time']); $formattedTime = date("m-d-y g:i", $time); $sensor_value = $row2['sensor_value']; $array[$formattedTime][$sensor_name] = $sensor_value; } } $json = json_encode($array, JSON_PRETTY_PRINT); echo "<pre>" . $json . "</pre>"; ?> 层次结构的结果。