使用Android本机代码创建arraylist

时间:2015-06-05 05:17:07

标签: android

如果这是一个重复的问题,请告诉我,不要downvote,我是Android-native开发的新手。我想使用Android本机代码创建一个ArrayList,我尝试了以下内容:

Application.Caller

但我仍然坚持代码中提到的错误。如果我在

之后放了一个分号
#include <jni.h>
#include <android/log.h>
#include <vector>

template<class T>

extern "C"{  //here it is showing **error expected unqualified-id before string constant**

std::vector<T> list;

JNIEXPORT void JNICALL Java_com_example_nativetestapp_NativeList_add(
    JNIEnv * env, jobject obj, T t) {
list.push_back(t);
 }

JNIEXPORT jboolean JNICALL Java_com_example_nativetestapp_NativeList_remove(
    JNIEnv * env, jobject obj, int pos) {
if (pos > list.size() - 1 || pos < 0)
    return false;
return list.erase(list.begin() + pos) != NULL ? true : false;
 }

JNIEXPORT jint JNICALL Java_com_example_nativetestapp_NativeList_size(
    JNIEnv * env, jobject obj) {
return list.size() == NULL ? 0 : list.size();
}

JNIEXPORT jint JNICALL Java_com_example_nativetestapp_NativeList_get(
    JNIEnv * env, jobject obj, int pos) {
return list[pos];
 }

JNIEXPORT jboolean JNICALL Java_com_example_nativetestapp_NativeList_contains(
    JNIEnv * env, jobject obj, T t) {
for (int var = 0; var < list.size(); var++) {
    if(t==list[var])
        return true;
 }
return false;
}

JNIEXPORT jboolean JNICALL Java_com_example_nativetestapp_NativeList_remove(
    JNIEnv * env, jobject obj, T t) {
for (int var = 0; var < list.size(); var++) {
        if(t==list[var]){
            list.erase(list.begin()+var);
            return true;
        }
    }
    return false;
}
};

然后在这一行之后我得到一个新错误:

  

无法解析T符号。

1 个答案:

答案 0 :(得分:1)

在每个extern "C"之前添加JNIEXPORT,而不是包装所有代码。