C++ Boost - __assert_fail 未在此范围内声明

C++ Boost - __assert_fail was not declared in this scope

目前我正在开发将在 Raspberry Pi 上使用的库 3. 为了遍历目录中的所有文件,我决定使用 boost::filesystem 模块。我准备了这段代码:

#include <boost/foreach.hpp>
#include <boost/filesystem.hpp>

boost::filesystem::path targetDir(some_path);
boost::filesystem::directory_iterator it(targetDir), eod;

BOOST_FOREACH(boost::filesystem::path const& p, std::make_pair(it, eod))
{
    if (boost::filesystem::is_regular_file(p))
    {
        // do smth with file
    }
}

Boost 已通过 apt-get install libboost1.62-all-dev 安装。

不幸的是,在 Visual Studio 2017 年编译(在远程 RPi 目标上,g++ 4.9.2)给了我这一堆错误:

__assert_fail was not declared in this scope (path_trails.hpp)
...
__assert_fail was not declared in this scope (path.hpp)
...
__assert_fail was not declared in this scope (shared_ptr.hpp)

我做错了什么?

问题与提升无关。我在上面有 #include <Magick++.h> 行,这会导致这些输出错误。评论完这一行后一切正常,现在我需要找出为什么 Magick++ 导致了这个兼容性问题。

我只是 运行 遇到了同样的问题。

什么是 st运行ge 是我没有在 stretch 或 buster 中看到这个问题,只在 bullseye 中看到。您使用的 imagemagick 版本不是来自 Raspbian 存档吗?

无论如何,我遇到的问题是 Magick++.h 最终将 assert.h 包含在命名空间中,当发生这种情况时,它会破坏任何其他试图使用 assert.h[=10 的代码=]

解决方法是 re-order 您的包含 and/or 添加 assert.h 的显式包含,以便 assert.h 在 Magick++.h

之前被包含