虽然以下代码在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&作为论点。编译器抱怨第三行代码:
错误:从'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的实例?顺便说一下,有可能吗?
如果我对问题的评价不好,请您提供一些有关如何解决问题的见解。
干杯。
答案 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的实例?顺便说一下,有可能吗?
const std::string s = defaultSaveFilePath.string();
还有
const std::wstring s = defaultSaveFilePath.wstring();
答案 2 :(得分:3)
Boost Path有一个简单的函数设置,可以在&#34; native&#34;中为你提供一个std :: string。 (即便携式)格式。将deck
与deck
结合使用。这可以在Boost支持的不同操作系统之间移植,也允许您在make_preferred
中工作。
看起来像这样:
string
或者,修改原始问题的代码:
std::string