C 相同#定义宏的多个定义位于所需库中
我包含的两个库在各自的.h文件中共享相同的宏定义C 相同#定义宏的多个定义位于所需库中,c,compilation,compiler-warnings,c-preprocessor,C,Compilation,Compiler Warnings,C Preprocessor,我包含的两个库在各自的.h文件中共享相同的宏定义 #define MAX <some value> //first definition of MAX in a file #define MAX <some other value> //second definition of MAX in a *different* file 及 我检查了每一个标题,它们都有“包含”防护装置 修复此错误的最佳方法是什么(如果没有,请使用不同的-W标志来抑制警告)?此处不包
#define MAX <some value> //first definition of MAX in a file
#define MAX <some other value> //second definition of MAX in a *different* file
及
我检查了每一个标题,它们都有“包含”防护装置
修复此错误的最佳方法是什么(如果没有,请使用不同的-W标志来抑制警告)?此处不包括保护或编译器标志将对您有所帮助。您大约有两种可能的解决方案:
#include
之间添加一个#undef MAX
在这里,include-guard和编译器标志都不会对您有所帮助。您大约有两种可能的解决方案:
#include
之间添加一个#undef MAX
这种情况唯一不好的地方是依赖于代码中的
MAX
,如果有的话。如果没有,在两个#include
s之间添加一个#undef MAX
,可能是最快的修复方法。如果您确实依赖于MAX
,您可能需要找出哪一个(我想这是最后一个:-),并采取适当的措施。这种情况唯一不好的部分是代码中对MAX
的依赖,如果有的话。如果没有,在两个#include
s之间添加一个#undef MAX
,可能是最快的修复方法。如果您确实依赖于MAX
,您可能需要找出哪一个(我想这是最后一个:-),并采取适当的措施。尼克,仅供参考,我最后通过更改源代码来解决此问题,正如AoeAoe在上面的评论中所提到的。原来httpd.h的MAX()
和MIN()
宏唯一被使用的地方是在httpd.cpp中,所以我把那些#定义
移到了httpd.cpp中,它们实际上应该放在第一位
事实上,它们可能已经存在于原始的MJPG拖缆代码中,也许Robotis只是在挑选出它们想要用于达尔文框架的片段时弄坏了它。无论如何,当前的MJPG拖缆代码有
#ifndef
保护MAX
和MIN
,并且在一个单独的utils.h
文件中,该文件只包含在httpd.c
中,而不是httpd.h仅供参考,Nick,我最后通过更改源代码解决了这个问题,正如AoeAoe在上述评论中提到的。原来httpd.h的MAX()
和MIN()
宏唯一被使用的地方是在httpd.cpp中,所以我把那些#定义
移到了httpd.cpp中,它们实际上应该放在第一位
事实上,它们可能已经存在于原始的MJPG拖缆代码中,也许Robotis只是在挑选出它们想要用于达尔文框架的片段时弄坏了它。无论如何,当前的MJPG拖缆代码有#ifndef
保护MAX
和MIN
,并将它们放在一个单独的utils.h
文件中,该文件仅包含在httpd.c
中,而不是httpd.h
,第三个选项是编辑源代码(不应花费太多时间)。我还抱怨bugzilla/maillist/support。第三个选项是编辑源代码(不应该花费太多时间)。我还抱怨bugzilla/邮件列表/支持。
.../httpd.h:43:1: warning: "MAX" redefined
.../opencv2/core/types_c.h:272:1: warning: this is the location of the previous definition