vs2019 c++重定义问题

vs 2019 另一个CPP文件只包含头什么都不写也提示重定义,这些不都是结构体指针吗?希望大伙告知原因

xin.h
#ifndef _x1_
#define  _x1_
#include<iostream>
#include<fstream>
#include<windows.h>
#define xian(str,title) MessageBoxA(NULL,str, title, MB_OK)

using std::cout;
using std::cin;
HANDLE mfile;
BYTE bfile[0X1000];
PIMAGE_DOS_HEADER pdosHead;
PIMAGE_NT_HEADERS   pntHead;
PIMAGE_FILE_HEADER    pfileHead;
PIMAGE_OPTIONAL_HEADER popHead;
PIMAGE_DATA_DIRECTORY pdataDir;
PIMAGE_SECTION_HEADER psecHead;
DWORD sectCont;
PIMAGE_IMPORT_DESCRIPTOR pimpDes;
PIMAGE_EXPORT_DIRECTORY pexDir;
PIMAGE_DATA_DIRECTORY pimpData;
PIMAGE_DATA_DIRECTORY pexData;
IMAGE_DATA_DIRECTORY oldImpData;
#endif 

错误提示

img


img

提示什么东西重复定义了啊?

头文件里面不能直定义变量,如果有多于1次include该头文件,则会报重定义。
比如你的HANDLE mfile; include多次后,在多个Cpp文件包含后,等于在多个cpp文件里面定义了HANDLE mfile;
解决办法:
1)如果所定义的变量只在一个cpp里面使用,则把定义移到cpp内,不在放头文件里
2)如果要在多个cpp里面使用,也把定义移动cpp内,另外在头文件里声明extern HANDLE mfile;

如果头文件中的内容冲突,就会报重定义。
建议将重复的代码放到namespace 里区分。
或者用 #ifndef来设计代码。

报的什么地方重定义?