【问题标题】:'Filesystem' member not in 'std' namespace“文件系统”成员不在“标准”命名空间中
【发布时间】:2021-06-06 00:08:28
【问题描述】:

我有一些代码打算获取 PNG 图像的文件大小(来自不同的堆栈溢出帖子)。

#include <fstream>
#include <cstring>
#include <cstddef>
#include <filesystem>

const char* INPUT_FILENAME = "test.png";

using namespace std;

int main()
{
    std::ifstream file;
    size_t size = 0;

    std::cout << "Attempting to open " << INPUT_FILENAME << std::endl;

    file.open( INPUT_FILENAME, std::ios::in | std::ios::ate );
    char* data = 0;

    file.seekg( 0, std::ios::end );
//    size = file.tellg();
    size = std::filesystem::file_size(INPUT_FILENAME);
    std::cout << "File size: " << size << std::endl;
    file.seekg( 0, std::ios::beg );

    data = new char[ size - 8 + 1 ];
    file.seekg( 8 ); // skip the header
    file.read( data, size );
    data[ size ] = '\0';
    std::cout << "Data size: " << std::strlen( data ) << std::endl;
}

运行时,我收到错误“命名空间“std”中没有名为“文件系统”的成员;你的意思是'std::__fs::filesystem'。即使尝试使用后一个函数也会导致其自身的错误。我需要帮助确定这是否是未安装所有正确软件包或我的 IDE 设置的问题?我应该注意我在 MacBook OS 11.2.3 和 QtCreator 5.14.2 上运行。

【问题讨论】:

  • 你使用的是什么编译器(clang?),什么版本? std::filesystem 仅在 C++17 中引入。如果您的编译器没有完整的 C++17 支持,它可能无法实现 std::filesystem,或者它可能只提供临时实现 std::experimental::filesystem

标签: c++ macos runtime-error qt-creator


【解决方案1】:

错误是说你的编译器不支持 std::filesystem。

IS 诸如“std::filesystem”之类的东西...取决于您的编译器。

此链接可能会有所帮助:

https://stackoverflow.com/a/49192230/421195

CONFIG += c++17 可用于 Qt 5.12 及更高版本。

对于 Qt 5.11 及更早版本,它不是一个可识别的 QMake 标志,您 得弄脏你的手。

添加 QMAKE_CXXFLAGS += -std=c++17 可以为 GCC 和 Clang 完成工作; 对于 MSVC,您可能需要指定 /std:c++17/std:c++latest

另见Compile With C++17 Mac

如果两个选项都不起作用,请使用您的特定编译器版本回帖。

【讨论】:

  • 谢谢!这个解决方案对我有用!我在可疑代码行size = std::filesystem::file_size(INPUT_FILENAME); 中遇到了下一个(可能相关的)问题。我知道不再收到文件系统成员错误,但我收到file_size' is unavailable: introduced in macOS 10.15。我在运行 11.2.3 时有点困惑。但如果这太不相关,我会考虑在不同的线程下提交。
  • 你可以随时去 Old School 打电话给stat()fstat() 或朋友;)
猜你喜欢
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
相关资源
最近更新 更多