2021年3月18日星期四

Swig error: member function already defined or declared

I'm pretty much a swig novice so I hope that the problem I'm running into is a basic one. My problem is that I can't seem to get swig to compile an unordered_map. Here's a MWE. Note that I eventually want to use the unordered map as a python dictionary.

// UsingUnorderedMap.h  #include <string>  #include <unordered_map>    class UsingUnorderedMap{  public:      UsingUnorderedMap() = default;      const std::unordered_map<std::string, double> &getStringDoubleMap() const;      void setStringDoubleMap(const std::unordered_map<std::string, double> &stringDoubleMap);  private:      std::unordered_map<std::string, double> StringDoubleMap;  };  
// UsingUnorderedMap.cpp  #include "UsingUnorderedMap.h"    const std::unordered_map<std::string, double> &UsingUnorderedMap::getStringDoubleMap() const {      return StringDoubleMap;  }    void UsingUnorderedMap::setStringDoubleMap(const std::unordered_map<std::string, double> &stringDoubleMap) {      StringDoubleMap = stringDoubleMap;  }    
// UsingUnorderedMap.i  %module UsingUnorderedMap    %{  #include "UsingUnorderedMap.h"  %}    %include "std_string.i"  %include "std_pair.i"  %include "std_unordered_map.i"    namespace std {      %template(StringDoubleDict) unordered_map<string, double>;  }    %include "UsingUnorderedMap.h"    

And you can build it with CMake using :

# CMakeLists.txt  include(UseSWIG)    set_property(SOURCE UsingUnorderedMap.i PROPERTY CPLUSPLUS ON)    swig_add_library(UsingUnorderedMap          LANGUAGE python          TYPE MODULE          SOURCES UsingUnorderedMap.i UsingUnorderedMap.h UsingUnorderedMap.cpp)    set_target_properties(UsingUnorderedMap          PROPERTIES LANGUAGE CXX)    target_include_directories(UsingUnorderedMap PUBLIC          ${Python_INCLUDE_DIRS}          ${CMAKE_CURRENT_SOURCE_DIR}          )  target_link_libraries(UsingUnorderedMap PUBLIC ${Python_LIBRARIES})    install(TARGETS UsingUnorderedMap DESTINATION UsingUnorderedMap)  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/UsingUnorderedMap.py DESTINATION UsingUnorderedMap)  

The error I get is:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\unordered_map(133): error C2535: 'std::unordered_map<std::string,double,std::less<std::string>,std::allocator<std::pair<const std::string,double>>,std::allocator<std::pair<const std::string,double>>>::unordered_map(unsigned __int64,const std::less<std::string> &,const std::allocator<std::pair<const std::string,double>> &)': member function already defined or declared  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\unordered_map(128): note: see declaration of 'std::unordered_map<std::string,double,std::less<std::string>,std::allocator<std::pair<const std::string,double>>,std::allocator<std::pair<const std::string,double>>>::unordered_map'  D:\LearnSwig\cmake-build-release-visual-studio\src\UsingUnorderedMap\CMakeFiles\UsingUnorderedMap.dir\UsingUnorderedMapPYTHON_wrap.cxx(5059): note: see reference to class template instantiation 'std::unordered_map<std::string,double,std::less<std::string>,std::allocator<std::pair<const std::string,double>>,std::allocator<std::pair<const std::string,double>>>' being compiled  ...  

Any help or advice you have would be greatly appreciated, thanks.

https://stackoverflow.com/questions/66690316/swig-error-member-function-already-defined-or-declared March 18, 2021 at 07:36PM

没有评论:

发表评论