ifndef用法不明,该怎么解决

ifndef用法不明
直接上代码吧,比说的清楚。Main.cpp:
#include <iostream>
#include "test1.h"
using namespace std;

extern void g_fun();
int main(){
cout << "Main.MAX_VALUE: " << MAX_VALUE << endl;
g_fun();
}


test1.cpp:
#include <iostream>
#include "test1.h"
using namespace std;

void g_fun(){
cout << "test1.MAX_VALUE: " << MAX_VALUE << endl;
int tmp;
cin >> tmp;
}


头文件test1.h:
#ifndef _TEST1_H_
#define _TEST1_H_
int MAX_VALUE = 20;
#endif


编译结果是MAX_VALUE重复定义了。如果没加ifndef的话,重复定义我能理解。可是头文件中加上了ifndef防止重复编译,怎么还会重复定义呢?
ifndef 重复定义 C++

------解决方案--------------------
#ifndef _TEST1_H_
#define _TEST1_H_
int MAX_VALUE = 20;
#endif

这句本来就是定义, 你应该放到一个源文件中, 并在头文件里修改为extern int MAX_VALUES;
------解决方案--------------------
你确定你的#ifndef..#endif
同时控制到了main.cpp 和 test1.cpp 产生的obj文件吗?
------解决方案--------------------
引用:
引用:你确定你的#ifndef..#endif
同时控制到了main.cpp 和 test1.cpp 产生的obj文件吗?朋友,能说清楚点吗?main.cpp和test1.cpp应该是生成了2个编译单元吧,分别是main.obj和test1.obj,难道说ifnef的防止重复只是针对同一个编译单元里的文件吗?


main.cpp 中 extern void g_fun();
在main.obj外部,找寻到test1.obj,并引用。
main.obj,test1.obj都有了MAX_VALUE这个东西,试问能不冲突吗?

至于为什么会找到test1.obj 就看你#include做的事了。
------解决方案--------------------
引用:
引用:你确定你的#ifndef..#endif
同时控制到了main.cpp 和 test1.cpp 产生的obj文件吗?朋友,能说清楚点吗?main.cpp和test1.cpp应该是生成了2个编译单元吧,分别是main.obj和test1.obj,难道说ifnef的防止重复只是针对同一个编译单元里的文件吗?


是的。仅对于一个编译单元有效。