【问题标题】:KEIL error: no instance of overloaded function "std::transform" matches the argument listKEIL 错误:没有重载函数“std::transform”的实例与参数列表匹配
【发布时间】:2013-08-22 04:05:55
【问题描述】:

我有一个问题在 XCode 中没有重新出现(甚至没有警告),但允许我在 Keil MDK 中编译。

void grammar::parse(std::string &_expr) {
    std::transform(_expr.begin(), _expr.end(), _expr.begin(), std::tolower);
    _expr.erase(std::remove_if(_expr.begin(), _expr.end(), std::isspace), _expr.end());
}

这就是我得到的

错误:#304:没有重载函数“std::transform”的实例与参数列表匹配 错误:#304:没有函数模板“std::remove_if”的实例与参数列表匹配

包含的标题:

#include <iostream>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <stdio.h>
#include <algorithm>

你能告诉我在哪里看吗?我很惊讶 XCode 版本按预期工作......

【问题讨论】:

    标签: c++ compiler-errors arm keil


    【解决方案1】:

    您包含ctype.h,该标头在全局命名空间中声明了一个函数tolower(这是C 库的一部分,因此那里没有其他命名空间)。也许您打算包括cctype。对于给定的 C 标准库头 X.h,有一个 c++ 版本 cX::std 命名空间内提供一些相同的功能。

    【讨论】:

    • 谢谢!我已将 替换为 ,但这并没有改变错误。我应该使用命名空间std;吗? 会导致错误吗?
    • @AnnaShkodenko:该错误可能比实际发生的情况更令人困惑。如果这不能解决问题,则问题可能是(尽管错误消息不会真正澄清)您还包括(很可能间接通过iostream 和可能的其他标准标头)locale 标头。该标头中有一些 std::tolower 重载,编译器可能无法确定您要使用哪个。如果是这种情况,您可以通过 casting 来帮助它(真正选择重载):static_cast&lt;int (*)(int)&gt;(std::tolower)
    猜你喜欢
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2014-12-27
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多