【问题标题】:OSX What does "error: cannot convert 'const std::__cxx11::basic_string<char>" mean?OSX “错误:无法转换'const std::__cxx11::basic_string<char>”是什么意思?
【发布时间】:2015-06-09 21:42:32
【问题描述】:

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

 $ 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

【问题讨论】:

  • 您可能需要PyList_SetItem(*dst, i, PyString_FromString(src[i].c_str()));。如果这不起作用,请发布所有这些变量的类型。
  • @Praetorian 谢谢你的工作

标签: c++ c++11 homebrew openmpi mpic++


【解决方案1】:

这是说它无法将 const std::__cxx11::basic_string&lt;char&gt; AKA const std::string 转换为 const char*。这是编译器要报告的正确错误。如上所述,您可以通过使用 c_str() 来解决此问题,但这将是一个可怕的 hack,并且可能违反某些组件的开源许可证。


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

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

【讨论】:

  • 这没有附带构建说明。我将删除 C++11 版本,因为它似乎没有必要。
  • brew link --force llvm/usr/local/bin 中创建指向 LLVM 二进制文件的符号链接。正如人们在编程中所理解的那样,这不是一个链接步骤。 (brew 是 OS X 上第三方软件的包管理器)
  • @kilojoules,您尝试构建的软件似乎是来自桑迪亚国家实验室的DAKOTA。它实际上带有构建说明甚至ones specifically for OS X
  • 但这将是一个可怕的 hack,并且可能违反某些组件的开源许可证。您能否解释一下添加 .c_str() 可能会违反许可证?
  • @Paul 从上下文中不清楚PyString_FromString 调用是在他的代码中还是在他正在使用的开源库之一中。不用说,修改开源代码(即使只是添加.c_str())可能违反该库的许可。
猜你喜欢
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多