草庐IT

c++ - 没有用于调用 std::transform 的匹配函数,未解析的重载函数类型

coder 2024-02-23 原文

我有以下正确的编译代码:

#include <iostream>
#include <map>
#include <algorithm>

template<typename K, typename V>
void write_map(const std::multimap<K, V> mm)
{
    std::cout << "MultiMap content:"<< std::endl << std::endl;
    for(auto it = mm.begin(); it != mm.end(); it++)
        std::cout << it->first << "\t" << it->second << std::endl;
}

template<typename K, typename V>
void write_map(const std::map<K, V> m)
{
    std::cout << "Map content:"<< std::endl << std::endl;
    for(auto it = m.begin(); it != m.end(); it++)
        std::cout << it->first << "\t" << it->second << std::endl;
}

template<typename KV, typename VK>
std::pair<VK, KV> flip_pair(const std::pair<KV, VK> &p)
{
    return std::pair<VK, KV>(p.second, p.first);
}

template<typename KV, typename VK>
std::multimap<VK, KV> flip_map(const std::map<KV, VK> &src)
{
    std::multimap<VK, KV> dst;
    // LINE_B follows
    std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), flip_pair<KV, VK>);
    return dst;
}

int main(void)
{
    std::map<std::string, uint32_t> m_words_map1;

    std::pair<std::string, uint32_t> p1("aaa", 2);
    std::pair<std::string, uint32_t> p2("bbb", 1);
    m_words_map1.insert(p1);
    m_words_map1.insert(p2);
    write_map(m_words_map1);
    // LINE_A follows
    std::multimap<uint32_t, std::string> sorted_multimap1 = flip_map(m_words_map1);
    write_map(sorted_multimap1);
}

我在 Debian 7.8 x64gcc 4.7.2 上成功编译

g++ foo.cpp -o foo -std=c++11

之后,我将这一堆函数嵌入到一个使用 CMake 的复杂项目中(这里是 CMakeLists.txt)

file(GLOB_RECURSE CORE_OBJ core/*.cpp)
file(GLOB_RECURSE LIB_OBJ_CPP lib/*.cpp)
file(GLOB_RECURSE LIB_OBJ_HPP lib/*.hpp)
file(GLOB_RECURSE LIB_OBJ_C lib/*.c)
list(APPEND LIB_OBJ ${LIB_OBJ_CPP} ${LIB_OBJ_HPP} ${LIB_OBJ_C})
file(GLOB_RECURSE USR_CPP usr/*.cpp)
file(GLOB_RECURSE USR_HPP usr/*.hpp)
list(APPEND USR_OBJ ${USR_CPP} ${USR_HPP})
list(APPEND BLOCKMON_LINK_LIBS pcap pthread boost_system boost_filesystem)
list(APPEND INCLUDE_DIRS lib/external/pugixml/src lib lib/external/factory lib/external/more lib/external/ lib/hash lib/bloom lib/pat core messages blocks ipfix core/block core/message core/composition core/scheduler core/time  ${USR_INCL})
include_directories( ${INCLUDE_DIRS} )
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -march=native -Wall -g -std=c++0x")
add_definitions(-D_GLIBCXX_USE_SCHED_YIELD -D_GLIBCXX_USE_NANOSLEEP)
target_link_libraries(blockmonpy blockmoncore boost_python)
link_directories(/usr/local/lib)
list(APPEND BLOCKMON_XML-RPC_LINK_LIBS xmlrpc_client++ xmlrpc_client xmlrpc++ xmlrpc xmlrpc_util xmlrpc_xmlparse xmlrpc_xmltok curl xmlrpc_packetsocket xmlrpc_server_abyss++ xmlrpc_server++ xmlrpc_server_abyss xmlrpc_server xmlrpc_abyss  pthread)
list(APPEND BLOCKMON_LINK_LIBS ${BLOCKMON_XML-RPC_LINK_LIBS})
target_link_libraries(blockmonWithXmlRPC blockmoncore ${BLOCKMON_LINK_LIBS})
add_library(blockmoncore SHARED ${CORE_OBJ} ${MSG_OBJ} ${IPFIX_OBJ} ${LIB_OBJ} ${BLOCKS_OBJ} ${USR_OBJ})
target_link_libraries(blockmoncore ${BLOCKMON_LINK_LIBS})
add_executable(blockmon bin/blockmon.cpp)
target_link_libraries(blockmon blockmoncore ${BLOCKMON_LINK_LIBS})

在这个项目的源文件中,片段被镜像到一个源文件中,没有任何修改。但是在这里,make 停止并提示以下内容。我调整了输出以更好地将行号与错误绑定(bind):

In instantiation of ‘std::multimap<VK, KV> flip_map(const std::map<K, V>&) [with KV = std::basic_string<char>; VK = unsigned int]’:
LINE A:   required from here
LINE B: error: no matching function for call to ‘transform(std::map<std::basic_string<char>, unsigned int>::const_iterator, std::map<std::basic_string<char>, unsigned int>::const_iterator, std::insert_iterator<std::multimap<unsigned int, std::basic_string<char> > >, <unresolved overloaded function type>)’
    note: candidates are:
    note: _OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, unsigned int> >; _OIter = std::insert_iterator<std::multimap<unsigned int, std::basic_string<char> > >; _UnaryOperation = std::pair<unsigned int, std::basic_string<char> > (Class::*)(const std::pair<std::basic_string<char>, unsigned int>&)]
    note:   no known conversion for argument 4 from ‘<unresolved overloaded function type>’ to ‘std::pair<unsigned int, std::basic_string<char> > (Class::*)(const std::pair<std::basic_string<char>, unsigned int>&)’
/usr/include/c++/4.7/bits/stl_algo.h:4977:5: note: template<class _IIter1, class _IIter2, class _OIter, class _BinaryOperation> _OIter std::transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation)
/usr/include/c++/4.7/bits/stl_algo.h:4977:5: note:   template argument deduction/substitution failed:
LINE B: note:   candidate expects 5 arguments, 4 provided

最佳答案

查看您的错误消息 (grep <unresolved overloaded function type> ),我的猜测是您以某种方式重载了函数 flip_pair<>你传递给std::transform在其他翻译单位。 std::transform is a template function , 它的仿函数作为模板类型传递。如果你有过载,那么 std::transform将无法推断出转换函数的类型,因此会出现错误。查看玩具示例 here ,它吐出本质上相同的错误消息。

关于c++ - 没有用于调用 std::transform 的匹配函数,未解析的重载函数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29878534/

有关c++ - 没有用于调用 std::transform 的匹配函数,未解析的重载函数类型的更多相关文章

  1. Ruby 解析字符串 - 2

    我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?

  2. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  5. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  6. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  7. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  8. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  9. ruby - 匹配未转义的平衡定界符对 - 2

    如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。

  10. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

随机推荐