提升与g ++:没有用于调用'current_path()'的匹配函数

时间:2012-09-12 23:23:45

标签: c++ boost g++

我有以下代码:

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,提升1.41.0(我知道它已经老了,但我没有升级选项)。

1 个答案:

答案 0 :(得分:2)

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

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