Раньше я обычно использовал C++11 и использовал флаг "-std=c++11" при ручной компиляции и создании файлов для этого. Теперь я хочу использовать библиотеку файловой системы, для которой требуется C++17 или более поздняя версия. Насколько я понимаю, это не должно быть проблемой, поскольку моя версия g++ — 11.4.0.
Я попытался изменить флаг в моем файле make на «-std=c++17», но это не сработало, так как я получил ошибку компиляции о том, что «файловая система не называет тип» и некоторые ссылки на пути к C++11. Потом попробовал вручную и получил то же самое.
Вот команда терминала (wsl) и результат (начало) ниже:g++ -std=c++17 fstesting.cc
fstesting.cc:3:17: ошибка: «файловая система» в пространстве имен «std» отсутствует
назови тип
3 | используя fs = std::filesystem;
| ^~~~~~~~~~
В файле, включенном из /usr/include/c++/11/bits/fs_fwd.h:37,
из /usr/include/c++/11/filesystem:44,
из fstesting.cc:1:
(это не совсем правильно отформатировано, но суть вы поняли)
Что дает?
Компилятор прекрасно переключается на правильную версию.
Вы пытаетесь использовать std::filesystem
в объявлении псевдонима, как если бы это был тип.
alias-declaration: usingidentifierattribute-specifier-seqopt=defining-type-id;
std::filesystem
— это не тип, это пространство имен. Вместо этого вам может потребоваться определение псевдонима пространства имен.
namespace-alias-definition: namespaceidentifier = qualified-namespace-specifier;
У вас есть 2 варианта, поскольку std::filesystem — это пространство имен.
а) «использование» пространства имен. Затем используйте классы внутри пространства имен файловой системы.
using namespace std::filesystem;
path p1 = "/tmp/a.txt";
б) псевдоним пространства имен
namespace fs = std::filessystem;
fs::path p1 = "/tmp/a.txt";
Пожалуйста, отредактируйте свой вопрос, чтобы показать нам минимальный воспроизводимый пример вашего кода, а также скопируйте и вставьте полный вывод сборки (включая команду) в виде текста.