to_string () не объявлено в gnustl_static - PullRequest
0 голосов
/ 05 июля 2019

Этот код выдаст сообщение об ошибке «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

но что я пытаюсь понять, какая часть кода скрывает метод to_string в gnustl от того, что его видели.

1 Ответ

0 голосов
/ 05 июля 2019

из того, что я понимаю из другого поста, вот почему 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?

...