Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблема с wchar_t в boost::format


Автор: avn 7.9.2009, 14:58
Добрый день!

Пытаюсь в Visual Studio 2008 сделать следующее:

Код

#include <boost\format.hpp>

using boost::format;

void Test (void)
{
    double a, b;

    a = -15;
    b = 3.176;

    wformat (L"%g + %g = %g%c") %a %b %(a + b) %1045;
}



А в ответ:

Цитата

error C3861: 'wformat': identifier not found


Boost собран с помощью http://www.boostpro.com, версия 1.39.0 .

Я заглянул в format_fwd.hpp :
Код

#if !defined(BOOST_NO_STD_WSTRING)  && !defined(BOOST_NO_STD_WSTREAMBUF) \
    && !defined(BOOST_FORMAT_IGNORE_STRINGSTREAM)
    typedef basic_format<wchar_t >  wformat;
#endif


Тогда я сделал принудительно:

Код

#undef BOOST_NO_STD_WSTRING
#undef BOOST_NO_STD_WSTREAMBUF
#undef BOOST_FORMAT_IGNORE_STRINGSTREAM


Все равно не сработало.

В чем дело? Есть подозрение, что BoostPro собирает ANSI-версию только. Хотя я не помню там конкретизации на эту тему.

Автор: andrew_121 7.9.2009, 15:32
...

Автор: avn 7.9.2009, 15:33
Причем так все компилируется:

Код

#include <boost\format.hpp>
using boost::format;
void Test (void)
{
    double a, b;
    a = -15;
    b = 3.176;
    format ("%g + %g = %g%c") %a %b %(a + b) %1045;
}

Автор: avn 7.9.2009, 16:29
Знатоки, вы где  smile  ??? Подскажите что-нибудь, пожалуйста, большая программа стоит! Приходится извращаться - готовить строки в ANSI, потом перегонять в Unicode, а это -  smile 

Автор: andrew_121 7.9.2009, 16:43
Код

#include <boost\format.hpp>
void Test (void)
{
    double a, b;
    a = -15;
    b = 3.176;
    boost::wformat (L"%g + %g = %g%c") %a %b %(a + b) %1045;
}

Автор: avn 7.9.2009, 17:00
Ща попробую...
Получилось! Спасибо!
Как оказалось, чтобы не писать boost::wformat, достаточно объявить using namespace boost помимо using boost::format.

Автор: MTWizard 7.9.2009, 17:17
Цитата(avn @  7.9.2009,  14:58 Найти цитируемый пост)
using boost::format;

Надо было написать
Код

using boost::wformat;

Автор: andrew_121 7.9.2009, 17:34
Цитата(MTWizard @  7.9.2009,  17:17 Найти цитируемый пост)
Надо было написать

вне функции, или своего пространства имен, такого лучше не делать.

Автор: bsa 7.9.2009, 23:27
Цитата(avn @ 7.9.2009,  17:00)
Как оказалось, чтобы не писать boost::wformat, достаточно объявить using namespace boost помимо using boost::format.

Думаю, для начала нужно изучить основый С++. В частности, пространства имен. А так же почитать умные книжки, в которых доступным языком объяснят, почему using .... делать не стоит, как ты делаешь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)