C++ 函数的重新定义

C++ 函数的重新定义,c++,c,C++,C,我有一个带有main函数的文件example1.cpp。此文件必须具有#include mylib.h和#include lib.h。文件mylib.h也有#include lib.h。当我试图编译这个程序时,错误重新定义xyz函数ocurs 例1.cpp #include mylib.h #include lib.h int main(){ //code } mylib.h #include lib.h //rest code 必须将.h文件包装在#defines中以避免重新定义。例如

我有一个带有
main
函数的文件
example1.cpp
。此文件必须具有
#include mylib.h
#include lib.h
。文件
mylib.h
也有
#include lib.h
。当我试图编译这个程序时,错误
重新定义xyz函数
ocurs

例1.cpp

#include mylib.h
#include lib.h

int main(){
//code
}
mylib.h

#include lib.h

//rest code

必须将.h文件包装在#defines中以避免重新定义。例如:

#if !defined(_MY_LIB_H_)
#define _MY_LIB_H_

// Add your function definitions here...

#endif  // _MY_LIB_H_
您现在可以在任何地方包含它,函数定义将被读取一次。还请注意,根据编译器的不同,您可以使用#ifndef。例如,如果版本为10或更高,VC++允许“#pragma once”:

#if _MSC_VER > 1000
#pragma once
#endif
在这种情况下,您不需要使用上面解释的#defines。

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

#ifndef LIB_H
#define LIB_H

// Actual header file code

#endif

请在头文件中显示代码,并使用“复制/粘贴”来显示实际的错误消息“您使用的是包含防护吗?@userr902691如果其中一个解决了您的问题,请不要忘记回答最能解决您的问题的答案。您应该从
\u MY_LIB\u H
中删除前导下划线。C++98标准17.4.3.1.2说:“每个包含双下划线或以下划线开头,后跟大写字母的名称都保留给实现以供任何使用。”同样,C99和C11标准中也有一个条款(问题被标记为C和C++)。