#ifndef 头文件卫士是为了保证类的头文件在一个.cpp文件中被多次引用后会不会出现重复定义的问题,注意,只是防止在一个.cpp文件中被多次引用.
#ifndef ELEMTYPE_H
#define ELEMTYPE_H
的意思是,如果前面没有定义ELEMTYPE_H,那么现在定义ELEMTYPE_H
它不需要有值,只是表明是否被定义过,它是为了防止头文件的重复定义
我举个简单的例子帮助你理解:
你在a.h里定义了一个类a:
class a{
}
然后在b.h里定义了一个类b,而且引用了a.h:
#include "a.h"
class b{
}
编译器在编译时,b.h的实际内容为:
class a{
}
class b{
}
这里还没出现错误。
然后你在c.cpp里引用了a.h和b.h:
#include "a.h"
#include "b.h"
那么,编译器在编译的时候会把a.h和b.h里的内容原封不动的填进来以代替这两句,这样c.cpp就变为:
class a{
}
class a{
}
class b{
}
你可以很清楚的看到,类a重定义了。
那么,如果我们用到前面提到的宏定义来分别定义a.h和b.h如下:
//a.h
#ifndef A_H
class a{
}
#define A_H
//b.h
#ifndef B_H
class b{
}
#define B_H
那么,c.cpp展开后为:
#ifndef A_H
class a{
}
#define A_H
#ifndef B_H
#ifndef A_H
class a{
}