2013-09-17 2 views
3

Я начал портировать некоторый Java-код в родной C++ в Android. У меня есть проблема с использованием строк в C++:Тип 'std :: string' не может быть разрешен.

Type 'std::string' could not be resolved 

Там есть мой пример кода

#include <jni.h> 
#include <lexu_me_test_native.h> 
#include <string.h> 
using namespace std; 

JNIEXPORT jstring JNICALL Java_lexu_me_test_native_prepairToShowNative 
    (JNIEnv * env, jclass javaThis, jstring str) 
{ 
    jboolean blnIsCopy; 
    jstring jstrOutput; 
    char* strCOut; 
    std::string ss; 

    const char* strCIn = (env)->GetStringUTFChars(str , &blnIsCopy); 
    // convert jstring to a char array 
    // Do stuff with the char array and and store the result 
    // in another char array strCOut 
    (env)->ReleaseStringUTFChars(str , strCIn); // release jstring 

    jstrOutput = (env)->NewStringUTF(strCOut); // convert char array to jstring 
    return jstrOutput; 
} 

Android.mk файл:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := native 
LOCAL_SRC_FILES := native.cpp 

include $(BUILD_SHARED_LIBRARY) 

Application.mk файл:

APP_STL := stlport_static 

MinGW установлен и добавлен в путь. Я пробовал использовать android-ndk-r8e и android-ndk-r8-crystallax-1, ничего не помогло. В ошибках терминала Cygwin:

Compile++ thumb : native <= native.cpp 
jni/native.cpp: In function '_jstring* Java_lexu_me_test_native_prepairToShowNative(JNIEnv*, jclass, jstring)': 
jni/native.cpp:11:2: error: 'string' was not declared in this scope 
jni/native.cpp:11:9: error: expected ';' before 'ss' 

Я использую Win 7 64bit. Может ли кто-нибудь сказать, как это можно решить? Спасибо.

EDIT.

В C/General C++ - Path и символы уже установлено: C: \ Android \ андроида-NDK-R8e \ платформы \ андроида-14 \ заклятой руки \ USR \ включают

+3

'# include ',' 'является заголовком библиотеки C. – jrok

+0

с использованием пространства имен std; Попробуйте строку вместо std :: string – Jite

+7

@Jite Не предлагайте это. [using namespace std - плохая практика] (http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice) – Rapptz

ответ

1

Если другие ответы Бесполезные «т работы, то попробуйте выполнить следующие действия:

  1. Если у вас есть using namespace std;, используйте string вместо std::string.
  2. Если #include <string> не работает, и вы используете Linux, попробуйте #include <unistd.h>. Если вы используете другую ОС, используйте #include <cstdlib>.
+0

Привет, я изменил std :: string на строку и добавил #include . Но Eclipse показывают ошибки. «Тип« строка »не может быть разрешен», хотя в cygwin компилируется штраф. – LEX

+0

Тогда у eclipse возникла проблема, но я предлагаю вам попробовать '#include ' для Windows или '#include ' для linux вместо '#include ' ' – shervin

+0

#include Eclipse принял его, но предупреждение не скрывало и не компилировалось в cygwing show error "'string' не была объявлена ​​в этой области" – LEX

-1

Проверьте свои Android.mk и Application.mk. Убедитесь, что вы выберите библиотеку STL и включают ИНТ в Application.mk файл:

Application.mk: APP_STL := gnustl_static 

(gnustl_static) может быть заменена на версию STL вы хотите, и STLPort еще вариант

См http://www.kandroid.org/ndk/docs/CPLUSPLUS-SUPPORT.html

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. –

+0

Вау это было давно. Я обновлю ответ. Однако см. Http://www.kandroid.org/ndk/docs/CPLUSPLUS-SUPPORT.html. –

Смежные вопросы