C++ 头文件已经防止重定义了,但是还是出现了错误

test.cpp:
#include"head.h"
int i=3;

main.cpp

#include"head.h"
#include
using namespace std;
extern int i;
int main(){

cout << i<< endl;

system("pause");
return 0;

}

head.h
#ifndef HEAD_H
#define HEAD_H
int ab = 0;
#endif

这个项目出现了重定义的问题,不知道为什么?求解答

为何要把ab的定义放在头文件呢?这样被不同的远函数包含就会出现重定义错误。解决办法,在头文件head中int ab=0;换成extern int ab;出现这种错误是对申明和定义理解不够深,要深刻加以区别。

是被不同的源文件包含。

 #ifndef HEAD_H
#define HEAD_H
int ab = 0;
#else
extern int abc;
#endif

好的,知道了,谢了