在 C 和 C++ 中通过指针访问结构
Accessing struct via pointer in C and C++
"Simple" 问题简写:
为什么
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++,所以我不明白为什么它应该编译。如错误所述,取消引用指针将产生 "variable" 而不是指针。即:在 C++ 中,它可以是
g_env->ExceptionDescribe
或
(*g_env).ExceptionDescribe
因为它不是 JNIEnv **
那是因为你的图书馆代码不一样。
在C中,JNIEnv
是指针类型:
typedef const struct JNINativeInterface *JNIEnv;
在 C++ 中,JNIEnv
是一个结构:
struct _JNIEnv;
typedef _JNIEnv JNIEnv;
所以它当然会在一种情况下编译,而在另一种情况下不会。
"Simple" 问题简写:
为什么
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++,所以我不明白为什么它应该编译。如错误所述,取消引用指针将产生 "variable" 而不是指针。即:在 C++ 中,它可以是
g_env->ExceptionDescribe
或
(*g_env).ExceptionDescribe
因为它不是 JNIEnv **
那是因为你的图书馆代码不一样。
在C中,JNIEnv
是指针类型:
typedef const struct JNINativeInterface *JNIEnv;
在 C++ 中,JNIEnv
是一个结构:
struct _JNIEnv;
typedef _JNIEnv JNIEnv;
所以它当然会在一种情况下编译,而在另一种情况下不会。