c ++包括重新声明

时间:2010-12-13 14:23:53

标签: c++ c compiler-construction makefile

我的包含路径中有两个库:

/usr/local/include/lib1/
/user/include/lib2/

两者都定义了一个头文件“vec.h”,我收到以下错误:

/usr/local/include/lib1/vec.h:22: error: redeclared with...

如何处理?

2 个答案:

答案 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重命名为其他内容并重新编译它,否则无法解决此问题。你不能在一个程序中拥有两个具有相同名称的不同东西。