VS2008重复引用头文件

feishanm 2009-08-18 03:49:31
VS2008新建的C++程序

h1.h内容:
#pragma once

#define cmdIN 0x01
#define cmdOUT 0x02
HANDLE handle;

C1.cpp:
#include "h1.h"
……

C2.cpp:
#include "h1.h"
……


错误提示:
Error 1 error LNK2005: "void * handle" (?handle@@3PAXA) already defined in testC.obj c1.obj testC
Error 2 fatal error LNK1169: one or more multiply defined symbols found D:\VS\VS2008\testConApp\Debug\testC.exe testC

...全文
316 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
feishanm 2009-08-18
  • 打赏
  • 举报
回复
一直没做过C++
谢谢各位的回答。
feishanm 2009-08-18
  • 打赏
  • 举报
回复
明白了。
问题已解决
xingzhe2001 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 feishanm 的回复:]
头文件中不能放变量的定义
可以放置声明
extern HANDLE handle;
然后将定义放到其中的一个源文件中去即可。
------------------------
不对,
extern HANDLE handle;放在C1.cpp中
提示:
Error 1error LNK2001: unresolved external symbol "void * handle" (?handle@@3PAXA) testC.obj testC

[/Quote]
是.h文件中写extern HANDLE handle;
C1.cpp 中写 Handle handle;
feishanm 2009-08-18
  • 打赏
  • 举报
回复
是不是VS2008定义全局变量不是这样定义的
feishanm 2009-08-18
  • 打赏
  • 举报
回复
头文件中不能放变量的定义
可以放置声明
extern HANDLE handle;
然后将定义放到其中的一个源文件中去即可。
------------------------
不对,
extern HANDLE handle;放在C1.cpp中
提示:
Error 1error LNK2001: unresolved external symbol "void * handle" (?handle@@3PAXA) testC.obj testC
zgjxwl 2009-08-18
  • 打赏
  • 举报
回复
extern HANDLE handle;
xingzhe2001 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 feishanm 的回复:]
HANDLE handle
那我想把它定义为全局的,多个CPP中调用,怎么定义呢?
[/Quote]

1楼的正解,把定义放在某一个cpp里,头文件只声明。

[Quote=引用 1 楼 goodname 的回复:]
头文件中不能放变量的定义
可以放置声明
extern HANDLE handle;
然后将定义放到其中的一个源文件中去即可。

[/Quote]
feishanm 2009-08-18
  • 打赏
  • 举报
回复
HANDLE handle
那我想把它定义为全局的,多个CPP中调用,怎么定义呢?
sidajk00 2009-08-18
  • 打赏
  • 举报
回复
行者,到处乱串。。。 是学生?
claio 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 feishanm 的回复:]
加了#pragma  once这个不行吗
[/Quote]
加了能保证这个h不被一个cpp include多次,不能保证只被多个cpp include一次
xingzhe2001 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 feishanm 的回复:]
加了#pragma  once这个不行吗
[/Quote]

#pragma once是防止同一个源文件展开后出现重复的定义。
你这种是不同的源文件在全局里出现重复的定义。
你想你每个用到这个头文件的cpp里都会定义一个HANDLE handle变量,编译器不知道用哪个,因为全都是全局的。
xingzhe2001 2009-08-18
  • 打赏
  • 举报
回复
顶这个
[Quote=引用 1 楼 goodname 的回复:]
头文件中不能放变量的定义
[/Quote]

楼主这个问题应该是新手最容易犯的错误了。
feishanm 2009-08-18
  • 打赏
  • 举报
回复
加了#pragma once这个不行吗
claio 2009-08-18
  • 打赏
  • 举报
回复
HANDLE handle作为全局变量被define了2次
goodname 2009-08-18
  • 打赏
  • 举报
回复
头文件中不能放变量的定义
可以放置声明
extern HANDLE handle;
然后将定义放到其中的一个源文件中去即可。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧