OSX "error: cannot convert 'const std::__cxx11::basic_string<char>"是什么意思?

OSX What does "error: cannot convert 'const std::__cxx11::basic_string<char>" mean?

本文关键字:lt string char 是什么 basic gt 意思 std cannot error convert      更新时间:2023-10-16

我正在我的机器上编译一个朋友的代码,我一直遇到这个错误:

 $ mpic++ dummy_file_name.cpp
 dummy_file_name.cpp: In member function 'bool dummy_name1::dummy_name2::python_convert(const StringMultiArray&, PyObject**)':
 dummy_file_name.cpp:430:55:error: cannot convert 'const std::__cxx11::basic_string<char>' to 'const char*' for argument '1' to 'PyObject* PyString_FromString(const char*)'
     PyList_SetItem(*dst, i, PyString_FromString(src[i]));

这是什么意思?如何诊断或治疗此问题?我使用的是mpic++编译器。我试过在谷歌上搜索这个错误,但没有发现任何有成效的信息。

以下是我如何构建我的环境:

brew reinstall gcc --without-multilib
export HOMEBREW_CC=gcc-5
export HOMEBREW_CXX=g++-5
brew install openmpi --build-form-source
brew install llvm --with-clang

据说它无法将const std::__cxx11::basic_string<char>(也就是const std::string(转换为const char*。这是编译器要报告的正确错误。如上所述,您可以使用c_str()来修复此问题,但这将是一个可怕的黑客攻击,可能会违反某些组件的开源许可证。


至于为什么会出现这个错误,可能是与标准c++库混淆了。您似乎将gcc用于openmpi,将llvm用于链接步骤,这非常奇怪。此外,您将强制gcc使用c++11,但不强制llvm使用。

你从哪里得到这些构建说明的?您可能需要查找一组更新的指令。