3

我有以下代码:

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 文档中的示例一样。我在这里错过了什么愚蠢的东西吗?如果我用“。”创建路径,它可以工作,但我想要完整的路径名,而不仅仅是“。”。

我在 RedHat 企业 6.2 上有 g++ 4.4.6,带有 boost 1.41.0(我知道它很旧,但我没有升级的选项)。

4

1 回答 1

2

current_path...的定义

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

  • current_path是一个函数模板,模板参数类型不能从它的参数中推断出来(其中没有参数)——所以我们必须显式地提供模板参数。
  • the return type of current_path() has the same type as the template argument.

The reason for this is so we can return narrow and wide character paths ie:

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 is the wide character version of path (akin to wstring and string).

于 2012-09-13T01:41:41.523 回答