头文件为什么不能定义变量

工程名:test
主程序:test.cpp
\———————————————————————————–
\test.cpp
#include “th.h”

int main()
{
return 0;
}
\——————————————————————————————
\——————————————————————————————
\th.h
#ifndef TH_H
#define TH_H

struct test {
};

test A;

#endif
\———————————————————————————
\———————————————————————————
\tcpp.cpp
#include “th.h”

\————————————————————————————-

运行project,遇到错误 :

——————–Configuration: test - Win32 Debug——————–
Compiling…
test.cpp
tcpp.cpp
Linking…
tcpp.obj : error LNK2005: “struct test A” (?A@@3Utest@@A) already defined in test.obj
Debug/test.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

test.exe - 2 error(s), 0 warning(s)


这到底是什么原因。虽然说我在头文件定义,但我已用预处理了,(不是已经处理头文件多重包含了吗)按道理不会出现这问题

请大侠们搭救!!!

我知道这是有问题的,不要跟我说不要在头文件定义变量,我也懂的处理,我想知道为什么不能定义变量原理?(一直想不通)请从编译器原理说明?

是两个cpp文件各自包含了同一个头文件,结果在两个obj里都定义了test?怎么就在两个obj都定义了test呢?
我觉的遇到第一个Cpp里的“#include”ch.h”” 就把头文件包含进去,但遇到第二个Cpp里的“#include”ch.h””
发现已经定义了TH_H就不再包含了。但3楼说,这里出现的错误不是一回事。既然不是这个问题,这个问题又是这么产生的呢?(高手请从编译器角度考虑下)(小弟很急,严重影响后期的学习,比较爱钻牛角尖)

(代码在VC6.0 ,7.0不能通过) 其他没试过

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值