错误:'to_string'不是'std'的成员

8
它可能是重复的,但我尝试了在StackOverflow上发现的所有解决方案。
我正在使用OpenCV制作一个C++库,并尝试将其编译为Android。
我无法使用to_string(int),但我不知道怎么做。 我尝试过修改我的makefile太多次了。 我最后的配置如下: Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) OPENCV_CAMERA_MODULES:=off OPENCV_INSTALL_MODULES:=on include $(LOCAL_PATH)/jsoncpp/Android.mk include /Users/rafaelruizmunoz/Desktop/AndroidDevelopment/OpenCV-2.4.9-android-sdk/sdk/native/jni/OpenCV.mk OPENCV_LIB_TYPE:=SHARED LOCAL_C_INCLUDES += $(LOCAL_PATH) LOCAL_C_INCLUDES += /Users/rafaelruizmunoz/opencvscan/OpenCVtry/ LOCAL_C_INCLUDES += /Users/rafaelruizmunoz/Desktop/RD/OpenCVtry/Libraries/jsoncpp-master/include LOCAL_PATH := jni LOCAL_ALLOW_UNDEFINED_SYMBOLS := true LOCAL_MODULE := libXYZ LOCAL_MODULE_NAME := mylibXYZ LOCAL_SRC_FILES := androidClass.cpp main.cpp utils.cpp LOCAL_LDLIBS += -llog -ldl LOCAL_CPPFLAGS := -std=c++11 CFLAGS=-g -Wall -Wextra -std=c++11 -Wno-write-strings ../../include/boost LOCAL_SHARED_LIBRARIES := libJsoncpp libopencv_java include $(BUILD_SHARED_LIBRARY)
这是我的Application.mk APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions APP_ABI := all APP_MODULES := libXYZ libJsoncpp APP_CPPFLAGS := -std=gnu++0x APP_CPPFLAGS += -frtti APP_CPPFLAGS += -fexceptions APP_CPPFLAGS += -DDEBUG APP_CPPFLAGS += -std=c++11 NDK_TOOLCHAIN_VERSION := 4.8 LOCAL_C_INCLUDES += ${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.8/include APP_USE_CPP0X := true 提前感谢您。

你的源文件在使用 std::to_string 之前是否包含 <string>?如果是这样,你可以使用 g++ -E ... 命令来查看预处理器输出,并检查 to_string 是否存在。如果没有,请检查头文件中的条件 #ifdef 并搜索缺失的定义。XCode 可能会定义你需要的额外预处理器符号... - Tony Delroy
是的,在XCode上它真的很好用。当我编译这个库时,它完美地工作。 - Rafael Ruiz Muñoz
好的,我要去做。 - Rafael Ruiz Muñoz
3个回答

9

我也遇到过这个问题。在gnu-libstdc++中,to_string不是“开箱即用”的。我查找了源代码,并发现std::to_string确实在库中(sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_string.h),但被禁用了。

#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
     && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))

在构建中添加-D_GLIBCXX_USE_C99后,std::to_string被选择。

6

Android NDK 9+配备llvm-libc++,支持cpp11特性。要启用它,您只需要在Application.mk中进行修改:

APP_CPPFLAGS := -std=c++11

并且

APP_STL:=c++_static 

或者

APP_STL:=c++_shared

这个标准库不仅与clang兼容,还与GCC兼容,对吗? - Violet Giraffe

3

您可以尝试这个:

#include <string>
#include <sstream>

#if defined(__ANDROID__)
#define TO_STRING to_stringAndroid

template <typename T>
inline std::string to_stringAndroid(const T& value)
{
    std::ostringstream os ;
    os << value ;
    return os.str() ;
}


#else

#define TO_STRING std::to_string

#endif

最好将参数作为引用传递: inline std::string to_stringAndroid(const T& value) - Dmytro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接