Компиляция cocos2d-x с помощью build_native.py возвращает: 'to_string' не был объявлен в этой области

Я пытаюсь создать проект cocos2d-x 3.0 (стабильный) для Android с помощью сценария build_native.py, но он зависает, когда класс использует функцию std::to_string (или std::stoi). Сборка проекта под Xcode вообще не вызывает проблем, просто компиляция из командной строки не работает.

Я уже импортирую <string> во все классы, которые используют эти функции, но безуспешно. Я также изменил файл Application.mk следующим образом:

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -DCOCOS2D_DEBUG=0 -std=c++11 -Wno-literal-suffix -fsigned-char

добавление флага -std=c++11, чтобы убедиться, что проект скомпилирован с использованием версии C++11.

Есть ли что-нибудь еще, что я должен сделать здесь?

Более

После этой темы я решил включить это:

#if CC_TARGET_PLATFORM == CC_PLATFORM_MAC || CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
string to_string(int t) {
    ostringstream os;
    os << t;
    return os.str();
}
#endif

в моих заголовках, так как я просто использую to_string с целочисленными входными данными. Это не очень хорошее решение, но работает нормально... но компилятор снова зависает, когда снова находит функцию stoi.


person marzapower    schedule 15.05.2014    source источник
comment
Вы можете использовать boost::lexical_cast в качестве замены для обоих   -  person Praetorian    schedule 16.05.2014
comment
Совместима ли библиотека boost с устройствами Android arm, а также с iOS?   -  person marzapower    schedule 16.05.2014
comment
Понятия не имею, я не знаком ни с Android, ни с iOS. Но вы должны быть в состоянии выяснить это довольно легко.   -  person Praetorian    schedule 16.05.2014


Ответы (3)


В итоге я использовал этот фрагмент кода:

#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
string to_string(int t) {
  ostringstream os;
  os << t;
  return os.str();
}

int stoi(const string myString) {
  return atoi(myString.c_str());
}
#endif
person marzapower    schedule 18.03.2015
comment
Я использую String::createWithFormat(%d,5)->getCString(); для преобразования чисел в строки - person Baris Atamer; 19.03.2015

Попробуйте использовать atoi вместо stoi. Хотя atoi возвращает ноль при ошибке, но работает с компиляцией из командной строки

person essess    schedule 17.05.2014
comment
Проблема здесь в том, что компилятор командной строки не может найти функции to_string и stoi (или даже atoi, наверное), но проект корректно строится и работает под Xcode. - person marzapower; 18.05.2014
comment
У меня команда build_native.py не зависает на atoi, но зависает на stoi. Это изменение решило мою проблему ранее. - person essess; 18.05.2014
comment
Да, но это не решает проблему to_string. - person marzapower; 18.05.2014
comment
Согласен, но вы должны написать метод to_string самостоятельно, используя оператор сдвига, так как вы уже опубликовали пример кода. Я нашел это как единственный вариант. если кто-то придет с лучшим вариантом, было бы неплохо. - person essess; 18.05.2014

вы можете выполнить процесс преобразования int в str с помощью библиотеки sstream, это довольно долго, но работает:

#include <sstream>
std::stringstream myStringStream ; 
myStringStream << myInteger;
myString = myStringStream.str();
person M. Asım Yıldız    schedule 05.03.2015