c ++包括重新声明

Ben*_*Ben 2 c c++ compiler-construction makefile

我的include路径中有两个库:

/usr/local/include/lib1/
/user/include/lib2/
Run Code Online (Sandbox Code Playgroud)

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

/usr/local/include/lib1/vec.h:22: error: redeclared with...
Run Code Online (Sandbox Code Playgroud)

怎么办呢?

RC.*_*RC. 5

你做:

#include "lib1/vec.h"
#include "lib2/vec.h"
Run Code Online (Sandbox Code Playgroud)

然后,您的makefile应包含直到lib1和lib2的包含路径.

-I /usr/local/include /user/include
Run Code Online (Sandbox Code Playgroud)

你应该确保标题周围有防护,以确保它们不会被声明两次.你应该看到类似的东西:

#ifndef MYHEADER_H_ab2592zx1__
#define MYHEADER_H_ab2592zx1__

#include ...
#include ...
class ...

#endif
Run Code Online (Sandbox Code Playgroud)

你应该拥有这些警卫,无论你是否有两个相同名称的包含,并且它们通常应该以相当随机的结尾,以限制/降低它们与另一个文件中的标题保护冲突的可能性.