std :: stoul在NDK r13b的Android应用程序的Qt应用程序上出错

时间:2017-01-04 15:55:31

标签: c++ qt c++11 android-ndk qmake

Qt app适用于android。我正在编写几乎C++ 14标准的代码。使用make_unique&等功能make_shared也是如此。

但是,当我尝试使用std::stoul时,只能在android 上进行编译。它编译和编译适用于clangosx上的iOS Microsoft compiler on windows。适用于error: 'stoul' is not a member of 'std' 。但只是无法在Android上编译,并出现以下错误: -

Qt app

我的NDK r13b使用最新的android来编译Qt app的代码。

我搜索了很多&发现人们面临的类似问题如here& here但是,我需要一种方法来解决android问题。 Qt App

我在.pro的{​​{1}}文件中添加了以下内容。但是没有用。

如何使用最新std::stoul Qt appandroid NDK r13b编译.pro

还尝试将以下块添加到我应用的android { QMAKE_CXXFLAGS_RELEASE += -std=c++1y QMAKE_CXXFLAGS_DEBUG += -std=c++1y CONFIG += c++14 QMAKE_APP_FLAG +=c++_static } 文件中。 但没有帮助

{{1}}

1 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是将函数注入命名空间std。请注意,您可能需要以更正确的方式实现这些,因为我只是在某些代码中被剔除以使其看起来正确。所以创建一个名为你喜欢的新文件并添加:

#ifndef MYFILE_H
#define MYFILE_H

#if defined(__ANDROID__)
namespace std {
    unsigned long stoul(const std::string &str)
    {
        if (str.length() == 0) {
            return 0;
        }
        auto returnValue = atoi(str.c_str());
        if (returnValue == 0) {
            throw std::invalid_argument("stoul: invalid string " + str);
        }
        return returnValue;
    }
}
#endif

#endif //MYFILE_H