首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

ifndef用法不明,该怎么解决

2013-03-16 
ifndef用法不明直接上代码吧,比说的清楚。Main.cpp:#include iostream#include test1.husing namespace

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的防止重复只是针对同一个编译单元里的文件吗?


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

热点排行