boost :: filesystem :: path :: native()返回std :: basic_string <wchar_t>而不是std :: basic_string <char> </char> </wchar_t>

时间:2013-08-21 19:44:36

标签: c++ boost

虽然以下代码在Linux上编译,但我无法在Windows上编译它:

boost::filesystem::path defaultSaveFilePath( base_directory );
defaultSaveFilePath = defaultSaveFilePath / "defaultfile.name";
const std::string s = defaultSaveFilePath.native();
return save(s);

其中base_directory是类的属性,其类型是std :: string,而函数save只需要一个const std :: string&amp;作为论点。编译器抱怨第三行代码:

错误:从'const string_type {aka const std :: basic_string}'转换为非标量类型'const string {aka const std :: basic_string}'request“

对于这个软件,我使用的是Boost 1.54(对于一些常见的库)和Qt 4.8.4(对于使用这个公共库的UI),我使用MingW GCC 4.6.2编译了所有内容。

似乎我的Windows Boost构建由于某种原因返回std :: basic_string。如果我的评估是正确的,我问你:如何使Boost返回std :: string的实例?顺便说一下,有可能吗?

如果我对问题的评价不好,请您提供一些有关如何解决问题的见解。

干杯。

3 个答案:

答案 0 :(得分:6)

在Windows上,boost :: filesystem按设计将本机路径表示为wchar_t - 请参阅documentation。这非常有意义,因为Windows上的路径可以包含非ASCII Unicode字符。你无法改变这种行为。

请注意,std::string只是std::basic_string<char>,并且所有本机Windows文件函数都可以接受宽字符路径名(只调用FooW()而不是Foo())。

答案 1 :(得分:3)

  

如何使Boost返回std :: string的实例?顺便说一下,有可能吗?

string()wstring()功能怎么样?

const std::string s = defaultSaveFilePath.string();

还有

const std::wstring s = defaultSaveFilePath.wstring();

答案 2 :(得分:3)

Boost Path有一个简单的函数设置,可以在&#34; native&#34;中为你提供一个std :: string。 (即便携式)格式。将deckdeck结合使用。这可以在Boost支持的不同操作系统之间移植,也允许您在make_preferred中工作。

看起来像这样:

string

或者,修改原始问题的代码:

std::string