c++ - 在 C 和 C++ 中通过指针访问结构
问题描述
“简单”的问题简而言之:
为什么会
JNIEnv *g_env = NULL;
(*g_env)->ExceptionDescribe(g_env);
在 gcc (C) 中编译
但不在 g++ (C++) 中
error: base operand of ‘->’ has non-pointer type ‘JNIEnv’ {aka ‘JNIEnv_’}
因为我主要使用 C++,所以我不明白为什么它应该编译。如错误所述,取消引用指针将产生一个“变量”而不是指针。即:在 C++ 中,它可以是
g_env->ExceptionDescribe
或者
(*g_env).ExceptionDescribe
因为它不是JNIEnv **
解决方案
那是因为您的库代码不同。
在 C 中,JNIEnv
是指针类型:
typedef const struct JNINativeInterface *JNIEnv;
在 C++ 中,JNIEnv
是一个结构:
struct _JNIEnv;
typedef _JNIEnv JNIEnv;
所以当然它会在一种情况下编译,而不是在另一种情况下编译。
推荐阅读
- excel - Excel 条件格式从一对多
- javascript - 在Javascript中获取基于FromIndex到EndIndex的列表
- sql - 在 oracle 中转换为小数时如何保留前导零
- laravel - PermissionDoesNotExist(没有 id 1 的权限)在 spatie 权限包 Laravel 5.6
- php - PHP - 代理检查器多线程
- html - 如何在css中的另一个div之上创建和放置一个半透明层
- c# - 编译器如何在具有相似签名的 2 之间选择方法?
- html - 在滚动视图的底部添加淡入淡出效果
- android - 如何使 VectorDrawable 适合 ImageView 并删除不必要的填充
- c# - 为剃须刀页面创建别名