ifndef用法不明,该怎么解决
ifndef用法不明
直接上代码吧,比说的清楚。Main.cpp:
test1.cpp:
头文件test1.h:
编译结果是MAX_VALUE重复定义了。如果没加ifndef的话,重复定义我能理解。可是头文件中加上了ifndef防止重复编译,怎么还会重复定义呢?
------解决方案--------------------
#ifndef _TEST1_H_
#define _TEST1_H_
int MAX_VALUE = 20;
#endif
这句本来就是定义, 你应该放到一个源文件中, 并在头文件里修改为extern int MAX_VALUES;
------解决方案--------------------
你确定你的#ifndef..#endif
同时控制到了main.cpp 和 test1.cpp 产生的obj文件吗?
------解决方案--------------------
main.cpp 中 extern void g_fun();
在main.obj外部,找寻到test1.obj,并引用。
main.obj,test1.obj都有了MAX_VALUE这个东西,试问能不冲突吗?
至于为什么会找到test1.obj 就看你#include做的事了。
------解决方案--------------------
是的。仅对于一个编译单元有效。
直接上代码吧,比说的清楚。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文件吗?
------解决方案--------------------
main.cpp 中 extern void g_fun();
在main.obj外部,找寻到test1.obj,并引用。
main.obj,test1.obj都有了MAX_VALUE这个东西,试问能不冲突吗?
至于为什么会找到test1.obj 就看你#include做的事了。
------解决方案--------------------
是的。仅对于一个编译单元有效。