2016-03-01 7 views
-2

Я столкнулся со следующей проблемой и надеюсь, что кто-то может мне помочь. Я хочу использовать библиотеку, где я не могу получить доступ к исходному коду. (только * .h) В этой библиотеке в определенной функции читается файл ASCII.Десятичный разделитель в C++

  • Если я использую эту функцию в простой main.cpp, все работает нормально.

Output: Test [-0.06 0.08 -0.02]*

  • Если связать Либерал в моем большом проекте (много внешнего ЛИЭСА) и вызвать функцию

Output: Test [-0 0 -0]

Я думаю, что десятичный разделитель изменен в моем большом проекте.

Любая идея, как решить эту проблему, если я не могу получить доступ к источнику библиотеки?

Я программирую на машине Linux Ubuntu в C++ с g ++ 4.8.1. Это библиотека старого коллеги (уже связалась с ним для источника, но не знаю, имеет ли он еще src), где у меня есть только файлы статической библиотеки * .a и * h.

Пример кода:

Mesh* vMesh = MeshLoader::load(file); 
Vec3* toPrint = vMesh->getVertex(4); 
std::cout<<"Output: Test:"<<std::endl; 
toPrint->print(); 

Но этот код на самом деле ничего не говорят, как я не могу получить доступ к функциям * .cpp код

+8

Мы собираемся нужно гораздо больше деталей, чем это. Что такое библиотека? Полностью скрыт/запатентован? Как насчет вашего кода вызова, как это выглядит? Вы знаете, на каком языке написана библиотека? Как он печатает? Лучшее, что я могу сделать сейчас, это указать вам на ['numpunct'] (http://en.cppreference.com/w/cpp/locale/numpunct). – BoBTFish

+1

Какая ОС? Если библиотека использует API Windows и ее функции преобразования, локаль пользователя задает десятичный разделитель. При анализе ввода пользователем это хорошо. При анализе текстовых данных не так много. Скорее всего, библиотека имеет возможность указать локаль. В противном случае вам придется изменить локаль вашего процесса. То же самое относится и к другим ОС –

ответ

1

Ну как я могу видеть источник, я должен был догадаться, использованную локаль в lib и снова переключитесь на мой старый язык. Не хорошо, но ..

std::setlocale(LC_NUMERIC, "en_US"); //<-- guessed 
... 
std::setlocale(LC_NUMERIC, "de_DE"); //<-- my standard 

Thx @numpunct и @Panagiotis Kanavos

Смежные вопросы