结构体重复定义

Microsoft777 2007-09-09 09:52:07
在 VS2005 下

我建立了一个头文件 Test.h

两个源文件分别为 Test.cpp 和 Keke.cpp

两个源文件都包含头文件 Test.h

各个文件的代码如下:



//Test.h

#ifndef TEST_H
#define TEST_H
extern struct Test
{
int x;
int y;
} test;
#endif



// Test.cpp

#include "stdafx.h"

void Init()
{
Test ts1;
ts1.x = 1;
ts1.y = 2;
}
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}


// Keke.cpp

#include "stdafx.h"

void Init()
{
Test tx;
tx.x = 1;
tx.y = 2;
}



stdafx.h 头文件中包含了 Test.h 头文件

当我生成工程的时候

就出现了如下的错误:

stdafx.obj : error LNK2005: "struct Test test" (?test@@3UTest@@A) 已经在 Keke.obj 中定义
Test.obj : error LNK2005: "struct Test test" (?test@@3UTest@@A) 已经在 Keke.obj 中定义
d:\My Documents\Visual Studio 2005\Projects\Test\Debug\Test.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

在结构体前面加上 extern 关键字或者 static 关键字

生成就可以成功了
...全文
942 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
makewater 2007-09-14
  • 打赏
  • 举报
回复
在结构体前面加上 extern 关键字或者 static 关键字

生成就可以成功了
=====================
这里好像是因为 你加了 extern以后就变成了 声明 它的作用只是 该变量在别的文件中已经定义了
你加了 static的话 该变量就变成了 静态全局变量 该变量只有在该文件中可以使用,此时该变量在该文件中屏蔽了全部变量 注意现在这2个变量已经不是同一个了 只是名字相同而已
makewater 2007-09-14
  • 打赏
  • 举报
回复
是这样的 在头文件里面声明了 然后在所有cpp文件中包含该头文件以后, 只需要在一个cpp文件中对变量初始化就ok 了 另外的cpp文件就可以调用了 因为所有的文件中用到的该变量使用的内存是同一个内存 。
Microsoft777 2007-09-14
  • 打赏
  • 举报
回复
在两个源文件中
分别定义同一个结构体的对象
在各自的文件进行初始化
为什么会出现重定义的错误

在每个文件
不是都存活一个实体吗
为什么会出现重定义啊

编译器是怎么将这些定义的对象构建的呢
Microsoft777 2007-09-09
  • 打赏
  • 举报
回复
可以的
不信你可以试一试
yangliu817 2007-09-09
  • 打赏
  • 举报
回复
用extern会成功? 能运行吗?

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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