我的包含路径中有两个库:
/usr/local/include/lib1/
/user/include/lib2/
两者都定义了一个头文件“vec.h”,我收到以下错误:
/usr/local/include/lib1/vec.h:22: error: redeclared with...
如何处理?
答案 0 :(得分:5)
你这样做:
#include "lib1/vec.h"
#include "lib2/vec.h"
然后你的makefile应该包含直到lib1和lib2的包含路径。
-I /usr/local/include /user/include
你应该确保标题周围有防护,以确保它们不会被声明两次。你应该看到类似的东西:
#ifndef MYHEADER_H_ab2592zx1__
#define MYHEADER_H_ab2592zx1__
#include ...
#include ...
class ...
#endif
你应该拥有这些警卫,无论你是否有两个相同名称的包含,它们通常应该以相当随机的方式结束,以限制/降低它们与另一个文件中的标题保护冲突的可能性。
答案 1 :(得分:1)
(抱歉,还不能发表评论,所以发帖作为答案。)lib1 / vec.h第22行究竟是什么,完整的错误信息是什么?看起来头部试图声明某些已经以某种不同方式声明的东西,这甚至可能与lib2 / vec.h无关。
修改强>
所以你有一个名字冲突。我不知道trimesh2 / include / Vec.h属于哪个库(可能是lib2),但问题肯定是这个头与lib1 / img.h之间存在冲突。两个库定义了两个具有相同名称Vec的不同类。除非您拥有其中一个库并且愿意将其中一个Vecs重命名为其他内容并重新编译它,否则无法解决此问题。你不能在一个程序中拥有两个具有相同名称的不同东西。