怎样避免头文件被两次编译。

时间:2021-09-17 10:02:34
怎样避免头文件被两次编译?
下面的问题怎样解决:我建了两个类CSaron和CWriteIC,还建了个头文件 userfun.h。在userfun头文件中建了一个函数:OpenCom(int)。我在类CSaron中引用了头文件 userfun.h。并且调用了函数OpenCom(int)。编译时没有问题。当我在类CWriteIC中引用头文件userfun.h并且调用了函数OpenCom(int)。编译时出现下列错误:
WriteIC.obj : error LNK2005: "bool __cdecl OpenCom(int)" (?OpenCom@@YA_NH@Z) already defined in SaronDlg.obj
当我把在类CWriteIC中引用头文件userfun去掉,编译时提示:函数OpenCom(int)没有声明。请问我怎样才能在类CWriteIC中调用头文件userfun.h中的函数OpenCom(int)。
谢谢各位。很急!!!!!!!!

10 个解决方案

#1


#pragma once

#2



在头文件中添加:
#ifndef ×××_FILE
#define ×××_FILE

头文件内容

#endif//×××_FILE

#3


微软是怎么做的

#if !defined(AFX_DRAWVIEW_H__D1B0B7BC_F996_4287_BF07_74EB81AFAEC6__INCLUDED_)
#define AFX_DRAWVIEW_H__D1B0B7BC_F996_4287_BF07_74EB81AFAEC6__INCLUDED_

定义
#endif // !defined(AFX_DRAWVIEW_H__D1B0B7BC_F996_4287_BF07_74EB81AFAEC6__INCLUDED_)

#4


微软是怎么做的

#if !defined(AFX_DRAWVIEW_H__D1B0B7BC_F996_4287_BF07_74EB81AFAEC6__INCLUDED_)
#define AFX_DRAWVIEW_H__D1B0B7BC_F996_4287_BF07_74EB81AFAEC6__INCLUDED_

定义
#endif // !defined(AFX_DRAWVIEW_H__D1B0B7BC_F996_4287_BF07_74EB81AFAEC6__INCLUDED_)

#5


假设你有一个头文件  myfile.h

#ifndef MYFILE   //如果编译过该头文件就在不再编译该头文件,如果没有编译过该头
                 //文件就继续往下执行
#define MYFILE   // 注意确保MYFILE  在工程中的唯一性

...........
 
#endif

看看vc自动生成的类的头文件就明白了

#6


#ifndef headerfile_h
#define headerfile_h
int iglobal;
......
#endif

或用这个比较简单的方法
#pragma once

#7


楼上都说了~~~

#8


#pragma once

#9


clean
rebuild all

#10


来晚了

#1


#pragma once

#2



在头文件中添加:
#ifndef ×××_FILE
#define ×××_FILE

头文件内容

#endif//×××_FILE

#3


微软是怎么做的

#if !defined(AFX_DRAWVIEW_H__D1B0B7BC_F996_4287_BF07_74EB81AFAEC6__INCLUDED_)
#define AFX_DRAWVIEW_H__D1B0B7BC_F996_4287_BF07_74EB81AFAEC6__INCLUDED_

定义
#endif // !defined(AFX_DRAWVIEW_H__D1B0B7BC_F996_4287_BF07_74EB81AFAEC6__INCLUDED_)

#4


微软是怎么做的

#if !defined(AFX_DRAWVIEW_H__D1B0B7BC_F996_4287_BF07_74EB81AFAEC6__INCLUDED_)
#define AFX_DRAWVIEW_H__D1B0B7BC_F996_4287_BF07_74EB81AFAEC6__INCLUDED_

定义
#endif // !defined(AFX_DRAWVIEW_H__D1B0B7BC_F996_4287_BF07_74EB81AFAEC6__INCLUDED_)

#5


假设你有一个头文件  myfile.h

#ifndef MYFILE   //如果编译过该头文件就在不再编译该头文件,如果没有编译过该头
                 //文件就继续往下执行
#define MYFILE   // 注意确保MYFILE  在工程中的唯一性

...........
 
#endif

看看vc自动生成的类的头文件就明白了

#6


#ifndef headerfile_h
#define headerfile_h
int iglobal;
......
#endif

或用这个比较简单的方法
#pragma once

#7


楼上都说了~~~

#8


#pragma once

#9


clean
rebuild all

#10


来晚了