此代码将给出错误消息“在此范围内未声明to_string”
#include <jni.h>
#inlcude <string>
#include <android/log.h>
using namespace std;
JNIEXPORT jboolean JNICALL Java_com_package_activity_method
(JNIEnv *env, jobject classObject,jdouble number) {
String string= to_string(number);
__android_log_print(ANDROID_LOG_DEBUG, "JNI","The number is: %s,string);
return;
}
如果跟踪头文件,我可以在string.h-> basic_string.h
中找到它们inline string
to_string(double __val)
{
const int __n =
__gnu_cxx::__numeric_traits<double>::__max_exponent10 + 20;
return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
"%f", __val);
}
所以它毕竟是被宣布的...
我可以通过编写自己的to_string版本来解决问题
String to_string(double number){
std::stringstream ss;
ss << number;
return ss.str(); }
或更改 -DANDROID_STL到c ++ _ static
但是我想了解的是,哪一部分代码遮盖了gnustl中的to_string方法。
答案 0 :(得分:0)
据我从其他帖子中了解到的,这就是为什么to_string不包含在GNUSTL中的原因
在c ++ config.h行1240中,以下行被注释掉,因此未定义_GLIBCXX_USE_C99
/* Define if C99 functions or macros from <wchar.h>, <math.h>, <complex.h>,
<stdio.h>, and <stdlib.h> can be used or exposed. */
/* #undef _GLIBCXX_USE_C99 */
,并在basic_string.h:2812
处检查了这种情况#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
&& !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
但是为什么我不理解stdio stdlib不是一些基本的c库呢?