Следующая программа компилируется в Visual Studio 2008 под Windows с обоими наборами символов «Использовать набор символов Unicode» и «Использовать многобайтовый набор символов».Тем не менее, он не компилируется под Ubuntu 10.04.2 LTS 64-bit и GCC 4.4.3.Я использую Boost 1.46.1 в обеих средах.
#include <boost/filesystem/path.hpp>
#include <iostream>
int main() {
boost::filesystem::path p(L"/test/test2");
std::wcout << p.native() << std::endl;
return 0;
}
Ошибка компиляции в Linux:
test.cpp: 6: ошибка: нет совпадения с оператором << в instd :: wcout << p.boost :: filesystem3 :: path :: native () '</p>
Мне кажется, что boost :: filesystem под Linux не предоставляет строку широких символов в path :: native(), несмотря на то, что boost :: filesystem :: path инициализирован широкой строкой.Кроме того, я предполагаю, что это потому, что Linux по умолчанию использует UTF-8, а Windows - UTF-16.пути на обеих платформах?
Второй вопрос: Когда я запускаю эту программу под Windows, она выдает:
/test/test2
Насколько я понимаю, метод native () должен преобразовывать путь в нативныйформат под Windows, который использует обратную косую черту вместо прямой.Почему строка выходит в формате POSIX?