在以下两行中,第一行给我一个编译时错误,第二行很好:
std::remove( boost::filesystem::path( mypath / "file.log" ).c_str() );
std::remove( boost::filesystem::path( mypath / "file.log" ).string().c_str() );
std::remove
签名是:int remove( const char* fname );
这是错误消息:
“没有重载函数“ std :: remove”的实例与参数列表匹配”
但是boost::filesystem::path::c_str()
和std::string::c_str()
都返回const char*
。
我正在使用的编译器是Visual C ++ 2013。
答案 0 :(得分:3)
但是boost :: filesystem :: path :: c_str()和std :: string :: c_str() 返回const char *
不,这不是真的。
我们可以打开boost\filesystem\path.hpp
源代码,看看那里发生了什么:
template< typename Char, Char Separator, Char PreferredSeparator, Char Dot >
struct path_constants
{
typedef path_constants< Char, Separator, PreferredSeparator, Dot > path_constants_base;
typedef Char value_type; // <---
//...
};
class path :
public filesystem::path_detail::path_constants<
#ifdef BOOST_WINDOWS_API
wchar_t, L'/', L'\\', L'.' // [1]
#else
char, '/', '/', '.'
#endif
>
{
并在[1]行中将wchar_t
作为第一个参数Char
传递到path_constants
模板,因此在Windows c_str
下返回指向宽字符(2个字节)的指针。