我的Linux Mint 17.2机器上有Netbeans的C ++项目。我正在使用GCC 5工具链(例如g ++ 5.3.0),Netbeans 8.1和Boost 1.61.0。
我在我的项目中遇到一个奇怪的警告,它出现在整个地方。例如,在我的main.cpp中,我位于最顶端的#include <iostream>
,该行会收到警告。 (我看到这个警告发生在我在每个文件中包含的第一个文件中,因此不是iostream等的问题。)。
警告是提升中存在递归#include
。具体而言,Netbeans抱怨<boost/predef/os/bsd/free.h>
包括<boost/predef/os/bsd.h>
,<boost/predef/os/bsd.h>
包括<boost/predef/os/bsd/free.h>
。为了记录,这似乎是真的 - 有没有人知道为什么这个递归包含在boost中,如果真的应该在那里?
更大的问题是我的系统不是BSD,所以我不知道为什么我从BSD头部获得这些警告,这些警告不应该被包含或者活动/定义。我尝试从main.cpp打印BOOST_PLATFORM_CONFIG
,并按预期打印出boost的Linux配置标头的路径 - 而不是BSD配置标头。而且,我的程序编译并运行正常,所以我假设它从未实际使用过BSD头文件。这意味着这些BSD标头给我警告的事实可能是Netbeans问题,而不是提升问题。
有没有人对如何使用这些奇怪的递归包含警告来缩小和修复此问题有任何想法?
答案 0 :(得分:3)
我遇到了同样的问题。问题在于使用boost predef / os / bsd.h 标头。它#include #ifn块中的5个文件,用于#ifndef BOOST_PREDEF_OS_BSD_H保护。这意味着如果这5个文件中的任何一个还包含bsd.h(他们这样做),这个头文件就不会防止递归。
我的解决方案是编辑predef / os / bsd.h文件并在#else块中添加一个递归防护 - 所以,从第94行开始,我的predef / os / bsd.h文件现在看起来像:
#ifndef BOOST_PREDEF_OS_BSD_H_PREVENT_RECURSION <-- ADD THIS
#define BOOST_PREDEF_OS_BSD_H_PREVENT_RECURSION <-- ADD THIS
#include <boost/predef/os/bsd/bsdi.h>
#include <boost/predef/os/bsd/dragonfly.h>
#include <boost/predef/os/bsd/free.h>
#include <boost/predef/os/bsd/open.h>
#include <boost/predef/os/bsd/net.h>
#endif <-- ADD THIS
现在netbeans代码帮助很高兴,我的代码仍然链接和编译而没有错误。
答案 1 :(得分:0)
粗略的方式:评论
#include <boost/predef/os/bsd.h>
无处不在(应该在以下标题内)
predef/os.h
predef/other/endian.h