我有一点问题。 我有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:找到一个或多个多重定义的符号
我能做什么才能在视觉上工作? 谢谢:))
答案 0 :(得分:1)
链接器没有说结构本身被定义了两次。它表示对象top
被定义为struct StackNode * top
两次。您只需在一个编译单元中定义它。
two.obj:错误LNK2005:&#34; struct StackNode * top &#34; (?top @@ 3PAUStackNode @@ A)已在one.obj中定义