2013-05-27 28 views
0

IM试图建立C++与NDK,构建代码,但我一直只是心不是收到此错误base operand of '->' has non-pointer type 'JNIEnv <aka _JNIEnv>'与C++指针错误和NDK

我已经尝试了前2页的谷歌没有运气每一个解决方案,将NDK对我很好。

nativemain.h

#ifndef NATIVEMAIN_H 
#define NATIVEMAIN_H 

#include <string.h> 
#include <jni.h> 

extern "C" 
{ 

JNIEXPORT jstring JNICALL Java_com_ndktest3_MyRenderer_stringFromJNI(JNIEnv* env, 
                jobject thiz); 
} 

#endif 

nativemain.cpp

#include <nativemain.h> 


JNIEXPORT jstring JNICALL Java_com_ndktest3_MyRenderer_stringFromJNI(JNIEnv* env, 
                jobject thiz) 
{ 
    return env->NewStringUTF("Hello from JNI !"); 
} 

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := nativemain 
LOCAL_SRC_FILES := nativemain.cpp 

include $(BUILD_SHARED_LIBRARY) 
+0

更多钞票复制:http://stackoverflow.com/questions/15764948/error-base-operand-of-has-non-pointer-type-jnienv – chr

+0

没有必要以后门适度。我已经尝试了解决方案,因为你可以看到,如果你会看看代码 – DevGuy

+0

道歉没有注意和抱歉,它没有帮助。 – chr

回答

0

试着改变你的语法略有

我相信错误是小姐-用于 在 ' - >' 操作

{ 
    return env->NewStringUTF("Hello from JNI !"); 
} 

尝试铸造ENV为指针像这样

{ 
    return (*env)->NewStringUTF(env, str); 
} 

其中str是一个预定义的字符串,如您的hello消息。
检查这篇文章作为一个交叉引用:Do I need to clean up the char* passed to NewStringUTF?

+0

这实际上是解除引用而不是铸造。 'env'是一个指向结构指针的指针,而' - >'运算符需要一个指向结构体的指针,所以我们必须在使用剩余指针指向结构体的' - >'之前解引用外部指针。 –