读书人

ADT 重定义没法通过

发布时间: 2013-08-09 15:16:24 作者: rapoo

ADT 重定义,无法通过,急急急急~!!!!!
我这个程序,现在只是个开始,通过不了,ADT  重定义,没法通过,ADT  重定义,没法通过,
下面就没信心继续敲代码了,求帮忙
(最好是附带详细思路~)

头文件


#ifndef _COOLE_H_

#define _COOLE_H_

#define TEL 12

typedef struct people
{
char name [TEL];
char tel [TEL];
char address[TEL];
char relation[TEL];
struct people * pst;
}List;
List * Ns;
List * Head;
List * Next;

int innew (char s[]);
int show (List * read,int num);

#endif

实现接口

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "hus_coole.h"

int innew (char s[])
{... ...}
int show (List * read,int num)
{... ...}

使用接口

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"hus_coole.h"

int main (void)
{... ...}


这三个文件,硬是无法通过,急啊!!!!!!下面是错误

error LNK2005: "struct people * Head" (?Head@@3PAUpeople@@A) 已经在 hus_coole.obj 中定义
error LNK2005: "struct people * Ns" (?Ns@@3PAUpeople@@A) 已经在 hus_coole.obj 中定义
error LNK2005: "struct people * Next" (?Next@@3PAUpeople@@A) 已经在 hus_coole.obj 中定义

就是这三个结构指针的重定义错误,一个头俩个大
急求帮忙(运行环境VS2010) C Visual?Studio?2010 重定义 ADT
[解决办法]
头文件
extern List * Ns;
extern List * Head;
extern List * Next;

main.c
List * Ns;
List * Head;
List * Next;

[解决办法]
不要在头文件中定义变量和函数实体,这些都要放在.c中进行,头文件只是导出变量和函数符号而已,比如:
extern List * Ns;


extern List * Head;
extern List * Next;
函数符号的导出加不加extern都是可以的:
extern int innew (char s[]);
int innew (char s[]);

ADT  重定义,没法通过,
下面就没信心继续敲代码了,求帮忙
(最好是附带详细思路~)

头文件
ADT  重定义,没法通过,
下面就没信心继续敲代码了,求帮忙
(最好是附带详细思路~)

头文件

#ifndef _COOLE_H_

#define _COOLE_H_

#define TEL 12

typedef struct people
{
char name [TEL];
char tel [TEL];
char address[TEL];
char relation[TEL];
struct people * pst;
}List;
List * Ns;
List * Head;
List * Next;

int innew (char s[]);
int show (List * read,int num);



#endif


实现接口

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "hus_coole.h"

int innew (char s[])
{... ...}
int show (List * read,int num)
{... ...}

使用接口

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"hus_coole.h"

int main (void)
{... ...}


这三个文件,硬是无法通过,急啊!!!!!!下面是错误

error LNK2005: "struct people * Head" (?Head@@3PAUpeople@@A) 已经在 hus_coole.obj 中定义
error LNK2005: "struct people * Ns" (?Ns@@3PAUpeople@@A) 已经在 hus_coole.obj 中定义
error LNK2005: "struct people * Next" (?Next@@3PAUpeople@@A) 已经在 hus_coole.obj 中定义

就是这三个结构指针的重定义错误,一个头俩个大
急求帮忙(运行环境VS2010)


在hus_coole.c中定义
List * Ns;
List * Head;
List * Next;
在hus_coole.h中声明为外部变量
extern List * Ns;
extern List * Head;
extern List * Next;
这样就可以了,否则你原来那样三个变量既在hus_coole.c中定义又在main.c中定义

读书人网 >C语言

热点推荐