повысить & amp; g ++: нет соответствующей функции для вызова функции current_path ()

У меня есть следующий код:

boost::filesystem::path p = boost::filesystem::current_path();

Но я получаю эту ошибку от g ++:

filesystem.cc: In function ‘int main(int, char**)’:
filesystem.cc:11: error: no matching function for call to ‘current_path()’
/usr/include/boost/filesystem/operations.hpp:769: note: candidates are: void boost::filesystem::current_path(const boost::filesystem::path&)
/usr/include/boost/filesystem/operations.hpp:771: note:                 void boost::filesystem::current_path(const boost::filesystem::wpath&)

В /usr/include/boost/filesystem/operations.hpp у меня есть следующее:

template< class Path >
Path current_path()
{
typename Path::external_string_type ph;
system::error_code ec( detail::get_current_path_api( ph ) );
if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
"boost::filesystem::current_path", ec ) );
return Path( Path::traits_type::to_internal( ph ) );
}

Так что функция есть. Я использую его так же, как примеры в документации Boost. Есть что-то глупое, что я здесь скучаю? Если я создаю путь с помощью «.», Это работает, но я хочу полное имя пути, а не просто «.».

У меня g ++ 4.4.6 на RedHat enterprise 6.2, с надстройкой 1.41.0 (я знаю, что она старая, но у меня нет возможности ее обновить).

3

Решение

Глядя на определение current_path

template< class Path > Path current_path() ...

  • current_path это шаблон функции, и тип аргумента шаблона не может быть выведен из его параметров (которых нет ни одного) — поэтому мы должны явно предоставить аргумент шаблона.
  • тип возврата current_path() имеет тот же тип, что и аргумент шаблона.

Причина этого в том, что мы можем возвращать узкие и широкие пути символов, т.е.

namespace fs = boost::filesystem;

// get the current path
fs::path p = fs::current_path<fs::path>();

// get the current path in wide characters
fs::wpath wp = fs::current_path<fs::wpath>();

wpath это широкоформатная версия path (сродни wstring а также string).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]