相同的struct不同的文件

时间:2015-05-14 19:30:31

标签: c visual-studio-2010 struct

我有一点问题。 我有2个文件:one.c和two.c 他们都解析并实现结构:StackNode 头文件是: one.h:

 #ifndef ONE_H
 #define ONE_H

 typedef struct StackNode StackNode;
 #endif

two.h:

 #ifndef TWO_H
 #define TWO_H

 #include "one.h"

 #endif

cpp文件: one.c:

 #include <stdio.h>
 #include <malloc.h>
 #include <string.h>
 #include <stdlib.h>
 #include "one.h"

 struct StackNode
 {
   ........
 };

two.c:

 #include <stdio.h>
 #include <malloc.h>
 #include "two.h"
 struct StackNode
 {
   ........
 };

为什么这个在linox中编译和运行,但在视觉上它说: two.obj:错误LNK2005:&#34; struct StackNode * top&#34; (?top @@ 3PAUStackNode @@ A)已在one.obj中定义 1&gt; c:\ users \ documents \ visual studio 2010 \ Projects \ Exercise \ Debug \ Exercise.exe:致命错误LNK1169:找到一个或多个多重定义的符号

我能做什么才能在视觉上工作? 谢谢:))

1 个答案:

答案 0 :(得分:1)

链接器没有说结构本身被定义了两次。它表示对象top被定义为struct StackNode * top两次。您只需在一个编译单元中定义它。

  

two.obj:错误LNK2005:&#34; struct StackNode * top &#34;   (?top @@ 3PAUStackNode @@ A)已在one.obj中定义