no matching function for call to ‘construct_at(std::pair<const std::__cxx11::bas...

2025年11月25日 19:26 状态: processing

🚨 错误信息

/usr/bin/c++ -DSQLITE_ENABLE_COLUMN_METADATA -DSYSTEM_LINUX_X86_64 -Dsenseauto_data_provider_EXPORTS -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/../../ThirdParty/IC_NM_ThirdParty/nlohmann/include -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/../../ThirdParty/IC_NM_ThirdParty/SQLiteCpp/include -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/../../ThirdParty/IC_NM_ThirdParty/SQLiteCpp/include/SQLiteCpp -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/../../ThirdParty/IC_NM_ThirdParty/curl/include -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/../memory_messages/include/public -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/../memory_messages/include -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/include/public -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/include/private/log -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/include/private/graph -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/include/private/graph/data -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/include/private/relational -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/include/private/relational/data -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/include/private/vector -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/include/private/utils -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/../../../ThirdParty/IC_NM_ThirdParty/nlohmann/include -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/../../../ThirdParty/IC_NM_ThirdParty/nlohmann/include/nlohmann -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/../../Vendor/IC_NM_OrinX/output/usr/local/include -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/../../Vendor/IC_NM_OrinX/output/usr/local/include/sqlite3 -I/data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/deps/linux-x86_64/kuzu -I/data/gerrit/workspace_AIBox_repo/ThirdParty/IC_NM_ThirdParty/SQLiteCpp/include -I/data/gerrit/workspace_AIBox_repo/ThirdParty/IC_NM_ThirdParty/sqlite3 -fPIC -DVERSION_MAJOR=1 -DVERSION_MINOR=0 -DVERSION_PATCH=1 -fPIC -std=gnu++20 -fPIC -MD -MT data_provider/CMakeFiles/senseauto_data_provider.dir/src/graph/data/Node_Person.cpp.o -MF CMakeFiles/senseauto_data_provider.dir/src/graph/data/Node_Person.cpp.o.d -o CMakeFiles/senseauto_data_provider.dir/src/graph/data/Node_Person.cpp.o -c /data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/src/graph/data/Node_Person.cpp In file included from /usr/include/c++/11/ext/alloc_traits.h:34, from /usr/include/c++/11/bits/stl_tree.h:67, from /usr/include/c++/11/map:60, from /data/gerrit/workspace_AIBox_repo/AICore/IC_NM_DataProvider/data_provider/src/graph/data/Node_Person.cpp:5: /usr/include/c++/11/bits/alloc_traits.h: In instantiation of ‘static constexpr void std::allocator_traits<std::allocator<_Up> >::construct(std::allocator_traits<std::allocator<_Up> >::allocator_type&, _Up*, _Args&& ...) [with _Up = std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >; _Args = {const std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::unique_ptr<kuzu::common::Value, std::default_delete<kuzu::common::Value> > >&}; _Tp = std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >, true>; std::allocator_traits<std::allocator<_Up> >::allocator_type = std::allocator<std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >, true> >]’: /usr/include/c++/11/bits/hashtable_policy.h:1878:36: required from ‘std::__detail::_Hashtable_alloc<_NodeAlloc>::__node_type* std::__detail::_Hashtable_alloc<_NodeAlloc>::_M_allocate_node(_Args&& ...) [with _Args = {const std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::unique_ptr<kuzu::common::Value, std::default_delete<kuzu::common::Value> > >&}; _NodeAlloc = std::allocator<std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >, true> >; std::__detail::_Hashtable_alloc<_NodeAlloc>::__node_ptr = std::allocator<std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >, true> >::value_type*]’ /usr/include/c++/11/bits/hashtable_policy.h:168:32: required from ‘std::__detail::_AllocNode<_NodeAlloc>::__node_type* std::__detail::_AllocNode<_NodeAlloc>::operator()(_Arg&&) const [with _Arg = const std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >&; _NodeAlloc = std::allocator<std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >, true> >; std::__detail::_AllocNode<_NodeAlloc>::__node_type = std::__detail::_AllocNode<std::allocator<std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >, true> > >::__node_type]’ /usr/include/c++/11/bits/hashtable.h:1306:20: required from ‘void std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::_M_assign(_Ht&&, const _NodeGenerator&) [with _Ht = const std::_Hashtable<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> > >, std::__detail::_Select1st, std::equal_to<std::__cxx11::basic_string<char> >, std::hash<std::__cxx11::basic_string<char> >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >&; _NodeGenerator = std::__detail::_AllocNode<std::allocator<std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >, true> > >; _Key = std::__cxx11::basic_string<char>; _Value = std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> > >; _ExtractKey = std::__detail::_Select1st; _Equal = std::equal_to<std::__cxx11::basic_string<char> >; _Hash = std::hash<std::__cxx11::basic_string<char> >; _RangeHash = std::__detail::_Mod_range_hashing; _Unused = std::__detail::_Default_ranged_hash; _RehashPolicy = std::__detail::_Prime_rehash_policy; _Traits = std::__detail::_Hashtable_traits<true, false, true>]’ /usr/include/c++/11/bits/hashtable.h:1421:16: required from ‘std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::_Hashtable(const std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>&) [with _Key = std::__cxx11::basic_string<char>; _Value = std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> > >; _ExtractKey = std::__detail::_Select1st; _Equal = std::equal_to<std::__cxx11::basic_string<char> >; _Hash = std::hash<std::__cxx11::basic_string<char> >; _RangeHash = std::__detail::_Mod_range_hashing; _Unused = std::__detail::_Default_ranged_hash; _RehashPolicy = std::__detail::_Prime_rehash_policy; _Traits = std::__detail::_Hashtable_traits<true, false, true>]’ /usr/include/c++/11/bits/unordered_map.h:181:7: required from here /usr/include/c++/11/bits/alloc_traits.h:518:28: error: no matching function for call to ‘construct_at(std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >*&, const std::pair<const std::__cxx11::basic_string<char>, std::unique_ptr<kuzu::common::Value> >&)’ 518 | std::construct_at(__p, std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

🤖 AI解决方案

您好!我来分析这个C++编译错误。

错误分析

错误翻译

原文:no matching function for call to ‘construct_at(...)’
译文:没有匹配的函数调用 'construct_at(...)'

原因分析

这是一个C++编译器错误,主要原因是:
  • STD版本不匹配:代码使用了C++20标准(-std=gnu++20),但编译器可能在尝试使用C++17的std::construct_at函数时出现了问题
  • 模板实例化失败:在哈希表的节点分配过程中,编译器无法找到合适的std::construct_at重载来构造std::pair>对象
  • 依赖库版本问题:可能使用了不同C++标准编译的库文件
  • 解决方案

    方案一:检查编译器兼容性

    # 在CMakeLists.txt中确认C++标准设置
    set(CMAKE_CXX_STANDARD 20)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)

    方案二:使用兼容的构造方式

    // 如果必须使用C++17兼容模式,可以修改构造方式
    // 替换可能出问题的模板代码
    template<typename T, typename... Args>
    T* construct_at(T* p, Args&&... args) {
        return new (p) T(std::forward<Args>(args)...);
    }

    方案三:检查依赖库编译标准

    # 确认所有依赖库都是用相同的C++标准编译的
    g++ -std=gnu++20 -dM -E -x c++ /dev/null | grep __cplusplus

    ️ 预防措施

  • 统一编译标准:确保项目中的所有组件使用相同的C++标准编译

  • 版本检查:在代码中添加静态断言检查编译器版本和特性支持

  • 渐进升级:大规模项目升级C++标准时,采用模块化渐进式升级策略

希望这个分析能帮助您解决编译问题!