NDK编译c包含C++头文件 error: unknown type name 'class' 的解决方法

在进行native开发的时候,难免会遇到C文件包含C++头文件而调用C++函数,若没做什么处理,直接include进行编译的话,会遇到以下错误:

error: unknown type name ‘class‘

error: expected ‘=‘, ‘,‘, ‘;‘, ‘asm‘ or ‘__attribute__‘ before ‘{‘ token

那么怎么解决呢?

首先,找下报错的原,从C以及C++特性不难发现:C文件include了带有C++关键字的头文件,如class等,因此,包含C++关键字的头文件被C编译器所编译,而不是用C++编译器编译,而C编译器无法识别C++的关键字,所以报错。那么解决方法很自然有两种方法:

第一种是最简单的就是统一用C++,把c文件改cpp;

第二种方法就是

在所有使用C++方法的地方加上:#ifdef __cplusplus,如:

#ifdef __cplusplus
class A{

};
#endif

注:如果使用了extern "C" ,也要加上#ifdef __cplusplus,因为C编译器无法识别extern "C":

#ifdef __cplusplus

extern "C" {

#endif

......

#ifdef __cplusplus

}

#endif

这个错误表明你正在尝试在一个列表(list)对象上访问一个不存在的属性或方法`target`。错误信息中的`AttributeError: 'list' object has no attribute 'target'`是Python抛出的异常,说明尝试的操作是不合法的。 在Python中,列表是一种数据结构,用于存储一系列的元素,这些元素可以是不同类型的数据,例如整数、字符串、其他列表等等。列表是通过方括号`[]`定义的,例如`my_list = [1, 2, 3]`。列表没有`target`这个属性,这个属性通常在类(class)中定义。 如果你想要访问列表中的某个元素,你应该使用索引(index),而不是试图访问一个不存在的属性。例如,如果你想要获取列表中第`i`个位置的元素,你应该使用`list[i]`的方式来访问。 如果你在使用一个为`bin`的函数或方法,并希望传入`nums`列表中的`target`元素,你需要先确定`target`是什么,以及它在哪里定义。`nums`应该是一个字典(dict),其中包含键值对,`target`是其中一个键,对应的值是列表中的目标元素。如果你的意图是找到`target`在`nums`中的索引位置,你需要先确定`target`的具体值,然后在`nums`中查找这个值的位置。 这里是一个简单的例子: ```python nums = {'target': [1, 2, 3, 4, 5]} target_value = nums['target'] # 获取与键'target'关联的值,即列表[1, 2, 3, 4, 5] # 假设我们要找到列表中值为4的索引 target_index = target_value.index(4) # 返回3,因为4是列表中的第四个元素 ``` 请注意,如果你在一个列表上调用`bin`方法,你应该确保这个方法是在你使用的环境中定义的,或者是一个标准库中的方法,但标准库中并没有为`bin`的列表方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值