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

为何会重定义呢

2013-09-05 
为什么会重定义呢?stdafx.h 包含了 #include Global.h#include externs.hGlobal.h :#pragma onceLPWST

为什么会重定义呢?
stdafx.h 包含了 
#include "Global.h"
#include "externs.h"

Global.h :
#pragma once

LPWSTR pSysDir = NULL;
LPWSTR pAppDir = NULL;


externs.h:
#pragma once

extern LPWSTR pSysDir;
extern LPWSTR pAppDir;

连接的时候就出现了:
inject.obj : error LNK2005: "unsigned short * pSysDir" (?pSysDir@@3PAGA) 已经在 stdafx.obj 中定义
inject.obj : error LNK2005: "unsigned short * pAppDir" (?pAppDir@@3PAGA) 已经在 stdafx.obj 中定义

[解决办法]
那你就不要在头文件中定义
extern LPWSTR pSysDir;
extern LPWSTR pAppDir;
[解决办法]

引用:
Quote: 引用:

LPWSTR pSysDir = NULL;
LPWSTR pAppDir = NULL;
这放到工程的其中一个CPP或者C文件中才对

stdafx.h 包含了 #include "Global.h",而在多个CPP或者C文件中#include "stdafx.h",当然重定义了

但是我加了 pragma once 啊

我也是看了网上说的全局变量的方法才这样使用的


#pragma once 只是避免在同一个CPP或者C文件中多次#include同一个头文件,不是说在一个CPP或者C文件中#include了,再在其它CPP或者C文件中#include就不起作用,因为每个CPP或者C文件都是单独编译的。

加了extern的是声明,不是定义;同一个变量声明可以多次,定义只能一次
extern LPWSTR pSysDir;extern LPWSTR pAppDir; 可以放到头文件
LPWSTR pSysDir = NULL; LPWSTR pAppDir = NULL;不要放到头文件

热点排行