“简单”问题简而言之:

到底为什么

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;

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

Source

关于c++ - 在C和C++中通过指针访问结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56866451/

10-10 21:15