Как работать с C ++ boost :: filesystem функциями, которые возвращают string_type? - PullRequest
2 голосов
/ 24 ноября 2010

Я пытаюсь скомпилировать следующий фрагмент кода:

#include <boost/filesystem/path.hpp>
//Other includes snipped for brevity

boost::filesystem::path inPath("C:\\PathThatDoesNotExist");
std::cout << "Folder \'" << inPath.external_directory_string() 
  << "\' does not exist.";

и получаю эту ошибку:

. \ PathCheck.cpp (31):ошибка C2679: двоичный файл «<<»: не найден оператор, который принимает правый операнд типа «const boost :: filesystem3 :: path :: string_type» (или нет допустимого преобразования) </p>

Мои исследования пока говорят мне, что это означает, что тип не известен во время компиляции и что мне может понадобиться typedef?но я не могу заставить это работать в моей голове или в моем коде.Функция external_directory_string () устарела, поэтому я также обеспокоен тем, что это может как-то быть фактором (я обрабатываю это с помощью #define BOOST_FILESYSTEM_DEPRECATED).

Может кто-нибудь объяснить, что string_type и рекомендовать, как превратить его вstd :: string или char *?Я знаю, что есть другие способы получить эту информацию из пути к каталогу, но я все равно хотел бы понять проблему.:)

РАЗРЕШЕНО: У меня есть v2 из 1.44 библиотек надстроек, но в моем заголовке было "#define BOOST_FILESYSTEM_VERSION 3" (сотрудник, использующий другую версию, добавил его).Если я комментирую эту директиву, мой код компилируется правильно.Похоже, нам нужно синхронизировать наши библиотеки.

Ответы [ 2 ]

2 голосов
/ 24 ноября 2010

С модами ниже, ваш код компилируется для меня.Это применимо с или без #define, который вы упомянули.

boost::filesystem::path inpath("C:\\PathThatDoesNotExist");
std::cout << "Folder \'" << inpath.external_directory_string() 
    << "\' does not exist.";

Какую версию Boost и какой компилятор вы используете?

Я нахожусь на Boost 1.44, Visual C ++ Express 2010. external_directory_string, кажется, возвращает std::string для меня.

РЕДАКТИРОВАТЬ: Однако, когда я явно устанавливаю версию Boost Filesystem, как это,Я получаю вашу ошибку:

#   define BOOST_FILESYSTEM_VERSION 3

Версия по умолчанию для меня на VS 2010 - 2, поэтому я бы выяснил, почему boost/filesystem/path.hpp устанавливает это значение на 3 в вашей сборке.

ИзBoost docs (1.45):

Это версия 2 библиотеки файловой системы.

версия 3, также доступна крупная версия со многими новыми и улучшенными функциями, но она нарушает некоторые существующиекод.

Похоже, если вы вернете свой билд к v2, вы окажетесь на более твердой почве.

1 голос
/ 24 ноября 2010

boost :: filesystem :: path typedefs external_string_type к std :: string (см. Здесь http://www.boost.org/doc/libs/1_43_0/boost/filesystem/path.hpp),, что указывает на проблему в другом месте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...