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

时间:2018-01-18 01:18:27

标签: 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;
}

错误:

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;
  

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

2 个答案:

答案 0 :(得分:7)

GCC 5.4.0于2016年6月发布;在采用C ++ 17标准之前一年多。它及其libstdc ++版本对C ++ 17的支持非常有限。您可以看到GCC何时添加了C ++ 17语言功能here,以及libstdc ++何时添加了C ++ 17标准库功能here

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

答案 1 :(得分:6)

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

namespace fs = std::exprimental::filesystem;

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