2011-12-29 79 views
0

我有一个文件example1.cppmain函数。这个文件必须有#include mylib.h#include lib.h。档案mylib.h也有#include lib.h。当我尝试编译该程序时,出现错误redefinition xyz function重新定义函数

example1.cpp

#include mylib.h 
#include lib.h 

int main(){ 
//code 
} 

mylib.h

#include lib.h 

//rest code 
+3

显示在头文件中的代码请,还可以使用复制/粘贴显示 – 2011-12-29 23:11:01

+3

您正在使用包括警卫实际的错误信息? – 2011-12-29 23:13:13

+0

@ userr902691如果其中一个解决了您的问题,请不要忘记[接受](http://stackoverflow.com/faq#howtoask)最能解决您问题的答案。 – 2011-12-30 21:02:28

回答

4

您必须包装在#define语句的.h文件,以避免redifinitions。例如:

#if !defined(_MY_LIB_H_) 
#define _MY_LIB_H_ 

// Add your function definitions here... 

#endif // _MY_LIB_H_ 

您现在可以将其包含在任何地方,并且函数定义将被读取一次。另请注意,您可以使用#ifndef,具体取决于编译器。 VC++例如,允许“的#pragma一次”,如果是10或更高版本:

#if _MSC_VER > 1000 
#pragma once 
#endif 

在这种情况下,你不需要使用#定义如上所述。

+4

您应该从'_MY_LIB_H_'中删除前导下划线。 C++ 98标准17.4.3.1.2说:“每个包含双下划线的名称或者以下划线开头,后面跟着大写字母的字符都保留给实施用于任何用途。” – 2011-12-29 23:24:19

+1

同样,C99和C11标准中也有一个条款(问题标有C和C++)。 – dreamlax 2011-12-30 08:04:22

7

您需要将include guards放在头文件中,以防止它在编译过程中被多次包含。

#ifndef LIB_H 
#define LIB_H 

// Actual header file code 

#endif