Although the following code compiles on Linux, I'm no being able to compile it on Windows:
boost::filesystem::path defaultSaveFilePath( base_directory );
defaultSaveFilePath = defaultSaveFilePath / "defaultfile.name";
const std::string s = defaultSaveFilePath.native();
return save(s);
where base_directory is an attribute of a class and its type is std::string, and function save simply takes a const std::string & as argument. The compiler complains about the third line of code:
error: conversion from 'const string_type {aka const std::basic_string}' to non-scalar type 'const string {aka const std::basic_string}' requested"
For this software, I'm using both Boost 1.54 (for some common libraries) and Qt 4.8.4 (for the UI that uses this common library) and I compiled everything with MingW GCC 4.6.2.
It seems that my Windows Boost build returns std::basic_string for some reason. If my assesment is correct, I ask you: how do I make Boost return instances of std::string? BTW, is it possible?
If I made a bad evaluation of the problem, I ask you to please provide some insight on how to solve it.
Cheers.
On Windows, boost::filesystem represents native paths as wchar_t
by design - see the documentation. That makes perfect sense, since paths on Windows can contain non-ASCII Unicode characters. You can't change that behaviour.
Note that std::string
is just std::basic_string<char>
, and that all native Windows file functions can accept wide character path names (just call FooW() rather than Foo()).
how do I make Boost return instances of std::string? BTW, is it possible?
How about string()
and wstring()
functions?
const std::string s = defaultSaveFilePath.string();
there is also
const std::wstring s = defaultSaveFilePath.wstring();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With