我有点小问题。
我有两个文件:1.c和2.c
它们同时声明并实现struct:StackNode
头文件是:
一.h:

 #ifndef ONE_H
 #define ONE_H

 typedef struct StackNode StackNode;
 #endif

二.h:
 #ifndef TWO_H
 #define TWO_H

 #include "one.h"

 #endif

cpp文件:
一c:
 #include <stdio.h>
 #include <malloc.h>
 #include <string.h>
 #include <stdlib.h>
 #include "one.h"

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

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

为什么在linox中编译和运行,但在visual stutio中它说:
2.obj:错误LNK2005:“struct StackNode*top”(?top@3PAUStackNode@A)已在one.obj中定义
1>c:\users\documents\visual studio 2010\Projects\Exercise\Debug\Exercise.exe:致命错误LNK1169:找到一个或多个多重定义的符号
我该怎么做才能让它在视觉上也工作呢?
谢谢:)

最佳答案

链接器不会说结构本身定义了两次。它说对象top的定义是struct StackNode * top的两倍。您只需在一个编译单元中定义它。
2.obj:错误LNK2005:“struct StackNode*top”
(?top@3PAUStackNode@A)已在one.obj中定义

关于c - 相同的结构不同的文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30245743/

10-10 08:59