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

为什么用extern定义一个全局变量,居然出现编译异常

2013-06-19 
为什么用extern定义一个全局变量,居然出现编译错误出现错误:1DrawObj.obj : error LNK2001: unresolved e

为什么用extern定义一个全局变量,居然出现编译错误
出现错误:1>DrawObj.obj : error LNK2001: unresolved external symbol "bool YxStatus" (?YxStatus@@3_NA)
     1>E:\HGDrawYun\Debug\DrawYun.exe : fatal error LNK1120: 1 unresolved externals

工程:VS2010多文档
1、在DrawYunView.h中的class CDrawYunView定义定义一个全局变量bool YxStatus;
   在DrawYunView类的构造函数中进行初始化及其成员函数中使用
2、在DrawObj.cpp中添加“extern bool  YxStatus;”并在本文件的成员函数中使用。

DrawObj.cpp中包含DrawYunView.h头文件:#include "drawYunView.h"
就这样简单为什么会出错 全局变量 Visual?Studio?2010 文档
[解决办法]
“extern bool  YxStatus;”
与 CDrawYunView 的 YxStatus 不是一回事,类里的 变量要 有 实例才能 得到的。
即 CDrawYunView *pView = GetActiveView();
pView->YxStatus;
[解决办法]
你要找一个cpp,添上这行
bool  YxStatus;
extern就是告诉编译器这个东西不是我的。
[解决办法]
全局变量放cpp定义
[解决办法]
全局变量最好在CPP里定义,.h文件里extern一下,然后其他使用全局变量的文件#include那个头文件就可以。也可以直接extern下
[解决办法]
工程:VS2010多文档
1、在DrawYunView.h中的class CDrawYunView定义定义一个全局变量bool YxStatus;
   在DrawYunView类的构造函数中进行初始化及其成员函数中使用
2、在DrawObj.cpp中添加“extern bool  YxStatus;”并在本文件的成员函数中使用。
-------------------------
你可以将yxStatus定义为CDrawYunView类的static成员变量,在DrawObj.cpp中使用的话,可以#include "DrawYunView.h",利用CDrawYunView::YxStatus(不过要是public的成员)
[解决办法]
首先,如果你的类都是在同一个project,也就是同个文件夹,用extern声明变量不用#include .h文件。
其次,定义全局变量要放在cpp文件中


引用:
Quote: 引用:

“extern bool  YxStatus;”
与 CDrawYunView 的 YxStatus 不是一回事,类里的 变量要 有 实例才能 得到的。
即 CDrawYunView *pView = GetActiveView();
pView->YxStatus;

我是想用全局变量,你这好像是另一种方法。
PS:不好意思按错了给了你一个板砖,对不起。

引用:
你要找一个cpp,添上这行
bool  YxStatus;
extern就是告诉编译器这个东西不是我的。


引用:
全局变量最好在CPP里定义,.h文件里extern一下,然后其他使用全局变量的文件#include那个头文件就可以。也可以直接extern下

我使用你的这种方法,可行,在DrawYunView.cpp中定义并初始化,在其.h中extern,最后在DrawObj.cpp中直接使用。
我在我的程序中发现有两个例子:有A、B、C在3种6个文件,1、在A.h文件的类中定义一个public变量x,在A.cpp的类构造函数中初始化,在B.cpp中最前面用extern,使得B.cpp中可以实现全局变量x的作用。
2、在C.h文件中定义类H,在A.cpp中定义类对象H h,在B.cpp中extern H h;为什么这两个行,而我参照1建立的全局变量会出错???
求指导!!!!!


1.楼主确定你在C.cpp中将H的构造函数和析构函数定义了?
2.在B.cpp中#include "A.h"了没有?(内置类型可以不#include头文件,但是在类类型中必须调用此语句)。
若果不是前两个错误,LZ吧错误信息粘出来看看

热点排行