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

时间:2015-04-26 13:56:59

标签: c++ stl compiler-errors std

我有以下,正确和编译代码:

Debian 7.8 x64

我在gcc 4.7.2g++ foo.cpp -o foo -std=c++11

成功编译
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})

之后,我在一个使用CMake的复杂项目中嵌入了这一系列函数(此处遵循CMakeLists.txt)

make

在此项目的源文件中,片段镜像到源文件中,不做任何修改。但在这里,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 停止并抱怨以下内容。我调整输出以更好地绑定包含错误的行号:

<span class="fa-stack fa-5x">
  <i class="fa fa-circle fa-stack-2x"></i>
  <i class="fa fa-plus fa-stack-1x fa-inverse"></i>
</span>

1 个答案:

答案 0 :(得分:2)

查看您的错误消息(grep NaN ),我的猜测是您在某种程度上重载了您传递给<unresolved overloaded function type>的其他函数flip_pair<>翻译单位。 std::transform is a template function,其仿函数作为模板类型传递。如果你有重载,那么std::transform将无法推断出转换函数的类型,从而导致错误。查看一个玩具示例here,该示例基本上会显示相同的错误消息。