我的包含路径中有两个库:
/usr/local/include/lib1/
/user/include/lib2/
两者都定义了头文件“vec.h”,我收到以下错误:
/usr/local/include/lib1/vec.h:22: error: redeclared with...
如何处理?
你会:
#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
无论您是否有两个同名的包含,您都应该拥有这些保护,并且它们通常应该以相当随机的内容结尾,以限制/降低它们与另一个文件中的标头保护冲突的可能性。
(抱歉,还不能发表评论,所以发布作为答案。)lib1/vec.h 的第 22 行到底是什么以及完整的错误消息是什么?看起来标头正试图声明已经在某处以不同方式声明的内容,这甚至可能与 lib2/vec.h 无关。
编辑
所以你们有名字冲突。我不知道trimesh2/include/Vec.h属于哪个库(可能是lib2),但问题肯定是这个头文件和lib1/img.h之间存在冲突。两个库定义了两个具有相同名称 Vec 的不同类。这个问题没有解决方案,除非您拥有其中一个库的源代码并且愿意将其中一个 Vec 重命名为其他名称并重新编译它。您不能在一个程序中拥有两个具有相同名称的不同内容。