错误:无法使用“const char [34]”类型的左值初始化“const char”类型的返回对象

Posted

技术标签:

【中文标题】错误:无法使用“const char [34]”类型的左值初始化“const char”类型的返回对象【英文标题】:error: cannot initialize return object of type 'const char' with an lvalue of type 'const char [34]' 【发布时间】:2021-01-30 06:10:59 【问题描述】:

我是 g++ 的新手。

我正在尝试编译这个简单的代码。

但是,有这个错误。

#include <boost/python.hpp>

char const doYouDo( const char* jobs )
    return "Hello, I am an embedded engineer.";


BOOST_PYTHON_MODULE( what )
    boost::python::def( "doYouDo", doYouDo);

我应该在哪里修复?

我的 g++ 编译命令在这里。

$g++ -fPIC -Wall -I/System/Volumes/Data/Users/whitebear/anaconda3/envs/aiwave/include/python3.6m/ -lboost_python -shared -o whatModule.so what.cpp

【问题讨论】:

看起来你的返回类型应该是char const *而不是char const 【参考方案1】:
"Hello, I am an embedded engineer." 

... 是 String Literal,它的类型为 const char[],并且您的函数被定义为返回单个常量字符 (char const),因此您的错误。

你可以做什么:

由于在 C++ 中不能按值返回 C 样式数组,因此可以改为返回指针:

char const* doYouDo( const char* jobs ) 
    return "Hello, I am an embedded engineer.";

或者你也可以使用std::string,因为它有一个来自const char*的内置构造函数:

std::string doYouDo( const char* jobs ) 
    return "Hello, I am an embedded engineer.";

【讨论】:

【参考方案2】:
const char* const doYouDo( const char* jobs ) 
    return "Hello, I am an embedded engineer.";

【讨论】:

纯代码答案没有用。 社区鼓励在代码中添加解释,而不是纯粹基于代码的答案(参见here)。

以上是关于错误:无法使用“const char [34]”类型的左值初始化“const char”类型的返回对象的主要内容,如果未能解决你的问题,请参考以下文章

错误 LNK2019:使用类编译程序时出现无法解析的外部符号错误消息

错误:使用类引用时无法识别的选择器

错误:无法使用反射定义类

无法启动应用程序(CreateProcess 错误=87),不能使用缩短类路径解决方法

无法使用 SWIG 在 Python 中实例化 C++ 类(获取属性错误)

使用 LibSVM 的 Java 代码中的 Weka 错误“无法处理数字类”