首页 > 解决方案 > 在 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++cpointersstructjnienv

解决方案


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

在 C 中,JNIEnv是指针类型:

typedef const struct JNINativeInterface *JNIEnv;

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

struct _JNIEnv;
typedef _JNIEnv JNIEnv;

所以当然它会在一种情况下编译,而不是在另一种情况下编译。

资源


推荐阅读