2015-05-14 3 views
1

У меня есть небольшая проблема. У меня есть 2 файла: one.c и two.c они оба decler и реализовать-структуру: 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, но в визуальном stutio он говорит: two.obj: ошибка LNK2005: "структура StackNode * сверху" (? Сверху @@ 3PAUStackNode @@ A) уже определен в one.obj 1> c: \ users \ documents \ visual studio 2010 \ Projects \ Exercise \ Debug \ Exercise.exe: фатальная ошибка LNK1169: обнаружен один или несколько символов с несколькими значениями

Что я могу сделать, это будет работать и на визуальной ? Спасибо :)

+0

изменить имя или поместить их в разные пространства имен (или сделать их одинаковыми и иметь только одно определение). – crashmstr

+0

, но почему/как он работает на Linux? –

+0

И почему вы включаете 'malloc.h' в C++? – crashmstr

ответ

1

Линкер не говорит, что сама структура определена дважды. В нем говорится, что объект top определен в два раза, как struct StackNode * top. Вы должны определить его только в одном блоке компиляции.

two.obj: ошибка LNK2005: "структура StackNode * сверху" (сверху @@ 3PAUStackNode @@ A?) Уже определена в one.obj

+0

Спасибо большое :) –

Смежные вопросы