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++)。