我在一个MFC工程中创立了一个头文件,用于定义一些全局变量
在头文件中我是这样写的
//global.h
#inndef GLOBAL_H
#define GLOBAL_H
int g_i;
#endif//GLOBAL_H然后再CMyView.cpp文件中包含了这个头文件
//CMyView.cpp
include "stdafx.h"
include "CMyView.h"
include "CMyDoc.h"
include "global.h"然后再CMyDoc.cpp文件中包含了这个头文件
//CMyDoc.cpp
include "stdafx.h"
include "CMyDoc.h"
include "global.h"但是链接的时候出现错误:
error LNK2005: "int i" (?i@@3HA) already defined in MyDoc.obj
请问错误出在哪里呢?谢谢!
在头文件中我是这样写的
//global.h
#inndef GLOBAL_H
#define GLOBAL_H
int g_i;
#endif//GLOBAL_H然后再CMyView.cpp文件中包含了这个头文件
//CMyView.cpp
include "stdafx.h"
include "CMyView.h"
include "CMyDoc.h"
include "global.h"然后再CMyDoc.cpp文件中包含了这个头文件
//CMyDoc.cpp
include "stdafx.h"
include "CMyDoc.h"
include "global.h"但是链接的时候出现错误:
error LNK2005: "int i" (?i@@3HA) already defined in MyDoc.obj
请问错误出在哪里呢?谢谢!
#ifndef GLOBAL_H //ifndef
#define GLOBAL_H
int g_i;
#endif//GLOBAL_H
在global.h中:extern int g_i;
#ifndef GLOBAL_H //ifndef
#define GLOBAL_H
int g_i;
#endif//GLOBAL_H//global.cpp
#include "global.h"
extern int g_i;
请问flyelf(空谷清音)和Mackz(在相互):
为什么一个变量不能直接在头文件中定义,然后在别的文件中直接调用
却一定要建立一个cpp文件,再用extern关键字声明呢
至于为什么,要问发明C语言的人了。看看MFC框架中theApp的定义就是这样。
这个与链接器(linker)有关.
正确的做法应该是如上面几位所说的,把全局变量的定义写在.cpp文件里,其它要引用它们的.cpp文件可以用extern来声明一下。如果变量比较多的话,就可以放在一个.h文件里。
变量定义与类型定义不同。
这个与链接器(linker)有关.
-----------------------------------------------------------------------
是不是说如果在一个头文件中建立了一个类,include guard就可以防止重复编译?
而在头文件中定义的全局变量,include guard是不起作用的?