我所包含的两个库在各自的.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
在汇编中我得到了
.../httpd.h:43:1: warning: "MAX" redefined
和
.../opencv2/core/types_c.h:272:1: warning: this is the location of the previous definition
我已经检查了每个标题,并且他们有#include警卫。
修复此错误的最佳方法是什么(如果失败,请使用不同的-W标志来抑制警告)?
答案 0 :(得分:2)
关于这种情况的唯一不好的部分是代码中MAX
的依赖性,如果有的话。如果您没有,则在两个#undef MAX
之间添加#include
可能是最快的修复。如果你做依赖于MAX
,你可能需要找出哪一个(我猜它是最后一个:-)并做一些合适的事情。
答案 1 :(得分:2)
仅供参考,尼克,我最后通过更改来源来解决这个问题,正如AoeAoe在上面的评论中提到的那样。事实证明,httpd.h的MAX()
和MIN()
宏使用的唯一地方是在httpd.cpp中,所以我只是将那些#defines
移到了httpd.cpp中,它们本应该在那里首先。
事实上,他们可能已经使用了原始的MJPG-Streamer代码,也许当他们挑选出他们想要用于Darwin框架的部分时,Robotis可能会破坏它。无论如何,当前的MJPG-Streamer代码在#ifndef
和MAX
周围有MIN
个守卫,并且还将它们放在一个单独的utils.h
文件here中包含在httpd.c
,here中,而不是httpd.h
。
答案 2 :(得分:1)
既不包括警卫也不包含编译器标志会对你有所帮助。您有大约两种可能的解决方案:
#include
两个标头放入同一个源文件中。#undef MAX
之间添加#include
。