报错问题:
原因分析:
头文件被编译了多次,导致该头文件中的数据类型被定义多次,造成类型重定义。
详细解释:因为不同路径的源文件或头文件,皆包含了相同的头文件,并将这些不同的源文件和头文件放入main主函数中进行编译,导致被包多个不同路径的源文件或头文件 包含的头文件,在main函数中被编译多次,导致该头文件中的数据结构被定义多次,造成类型重定义的错误。
解决方法:
- 在头文件第一行 加上
#pragma once
表示:该头文件只被编译1次。
但这种方法的弊端就是,当引用的头文件写成绝对路径的形式,并且还绝对路径为虚拟盘时,#pragma once
就会不起作用,原因是因为当 xxx.h 的绝对路径是在虚拟盘中例如#include E://xxx.h
和#include xxx.h
皆表示包含同一个头文件,但当虚拟盘运行项目的地址不同时,这种绝对地址包含方式#include E://xxx.h
就会由于运行项目地址的不同,导致绝对地址不同,造成VS编译器识别不出来包含的头文件是同一个头文件,就还会造成同一个头文件的数据结构被编译多次,导致类型重定义。 - 在头文件使用
#ifndef xxx
#define xxx
(建议使用这一种方式)
例如: