在C和C ++中通过指针访问结构

时间:2019-07-03 08:58:47

标签: c++ c pointers struct jnienv

简短的“简单”问题:

为什么会这样

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 **

1 个答案:

答案 0 :(得分:7)

那是因为您的库代码不同。

在C中,JNIEnv是指针类型:

typedef const struct JNINativeInterface *JNIEnv;

在C ++中,JNIEnv是一个结构:

struct _JNIEnv;
typedef _JNIEnv JNIEnv;

因此,它当然会在一种情况下编译,而在另一种情况下不会编译。

Source