我有以下代码:
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(我知道它已经老了,但我没有升级选项)。
答案 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>();
wpath
是path
的宽字符版本(类似于wstring
和string
)。