c ++ 17`filesystem`不是名称空间名称

ar2*_*015 4 c++ g++ std c++17

我想知道为什么在以下代码中,filesystem找不到命名空间:

g ++ -std = c ++ 17 main.cpp -lstdc ++

// #include <filesystem>   <- error, so changed to the following:
#include <experimental/filesystem>

namespace fs = std::filesystem;

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误:

main.cpp:3:21: error: ‘filesystem’ is not a namespace-name
 namespace fs = std::filesystem;
                     ^
main.cpp:3:31: error: expected namespace-name before ‘;’ token
 namespace fs = std::filesystem;
Run Code Online (Sandbox Code Playgroud)

gcc版本5.4.0 20160609(Ubuntu 5.4.0-6ubuntu1~16.04.5)

Pio*_*ycz 9

<exprimental/..> 表示实验名称空间

namespace fs = std::exprimental::filesystem;
Run Code Online (Sandbox Code Playgroud)

请参阅:http://en.cppreference.com/w/cpp/experimental/fs/path


Mil*_*nek 8

GCC 5.4.0于2016年6月发布; 在采用C++ 17标准之前一年多.它及其libstdc ++版本对C++ 17的支持非常有限.你可以看到,当GCC加入C++语言17功能在这里当的libstdc ++加入C++ 17层标准库的功能在这里.

在GCC 5.4发布时,文件系统库尚未在std::filesystem命名空间中实现.它与该版本中包含的任何其他<experimental/...>标头一起位于std::experimental命名空间中.

  • @SamZiggler 有什么解决方案吗?如果必须使用旧编译器,则必须包含适当的实验头文件并使用 `std::experimental::filesystem`。如果您想与各种编译器版本兼容,您可以使用一些预处理器检查来进行设置。 (2认同)