工程名: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不能通过) 其他没试过