OSX Что означает "ошибка: невозможно преобразовать" const std:: __ cxx11:: basic_string<char>"?

Я компилирую код друга на моей машине, и меня постоянно беспокоит эта ошибка:

 $ 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

1 ответ

Решение

Он говорит, что не может конвертировать const std::__cxx11::basic_string<char> AKA const std::string в const char*, Это правильная ошибка для отчета компилятора. Как указано выше, вы можете исправить это, используя c_str(), но это было бы ужасным взломом, и, возможно, нарушить лицензию с открытым исходным кодом какого-либо компонента.


Что касается того, почему вы получаете эту ошибку, это может быть путаница со стандартными стандартными библиотеками C++. Вы, кажется, используете gcc за openmpi а также llvm для шага ссылки, который очень странный. Кроме того, вы заставляете c++11 за gcc, но не для llvm,

Где вы взяли эти инструкции по сборке? Вы можете посмотреть обновленный набор инструкций.

Другие вопросы по тегам