boost & g++:调用'current_path()'没有匹配函数

boost & g++: no matching function for call to 'current_path()'

本文关键字:函数 g++ 调用 current boost path      更新时间:2023-10-16

我有以下代码:

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 enterprise 6.2上有g++4.4.6,版本为1.41.0(我知道它很旧,但我没有升级的选项)。

查看current_path的定义。。。

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

  • current_path是一个函数模板,模板参数类型无法从其参数中推断出来(其中没有),因此我们必须显式提供模板参数
  • CCD_ 4的返回类型具有与模板参数相同的类型

这样做的原因是我们可以返回窄和宽的字符路径,即:

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>();

wpathpath的宽字符版本(类似于wstringstring)。