首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

头文件重复定义有关问题

2012-09-10 
头文件重复定义问题头文件 head.h 的定义如下,已经用#ifndef #define #endif 来防止冲文件被重复定义了但

头文件重复定义问题
头文件 head.h 的定义如下,已经用#ifndef #define #endif 来防止冲文件被重复定义了但是编译的时候还是提示
int count=0; /* 学生数量的计数器; */
char subject[SUMJECT_NUM][20];// 学科名
 被重复定义 该怎么解决这个问题,有什么问题请指出 谢谢


C/C++ code
#ifndef _HEAD_H#define _HEAD_H#include <stdio.h>#include <string.h>#include <stdlib.h>#define SUMJECT_NUM 3#define MAX_SRUDENT 100struct student// 学生属性{    char std_num[10];    char name[20];    float sco[SUMJECT_NUM];    float avg;};int count=0;  /* 学生数量的计数器;  */char subject[SUMJECT_NUM][20];// 学科名typedef struct student * poit_List ;void swap(poit_List *a,poit_List *b);void mutu(void);void F_input(poit_List *List);void file_out(poit_List *List);void out(poit_List *List);poit_List *  cread_student(poit_List *List);void check_studend(poit_List *List);void Modify(poit_List *List);void Delete(poit_List *List);void sort(poit_List *List);void Add(poit_List *List);void sub(poit_List *List);#endif


[解决办法]
变量定义最好不要放在头文件里
[解决办法]
更乱了,试试
C/C++ code
//.h文件#ifndef _HEAD_H#define _HEAD_H#include <stdio.h>#include <string.h>#include <stdlib.h>#define SUMJECT_NUM 3#define MAX_SRUDENT 100struct student// 学生属性{    char std_num[10];    char name[20];    float sco[SUMJECT_NUM];    float avg;};// int count=0;  /* 学生数量的计数器;  */// char subject[SUMJECT_NUM][20];// 学科名extern int count;extern char subject[SUMJECT_NUM][20];typedef struct student * poit_List ;void swap(poit_List *a,poit_List *b);void mutu(void);void F_input(poit_List *List);void file_out(poit_List *List);void out(poit_List *List);poit_List *  cread_student(poit_List *List);void check_studend(poit_List *List);void Modify(poit_List *List);void Delete(poit_List *List);void sort(poit_List *List);void Add(poit_List *List);void sub(poit_List *List);#endif//.c文件#include "head.h"#define SUMJECT_NUM 3#define MAX_SRUDENT 100int count=0;  /* 学生数量的计数器;  */char subject[SUMJECT_NUM][20];// 学科名
[解决办法]
你把代码打包 上传出来 直接改你的代码 这样比较好 说半天也不能解决问题 说不定是别的问题引起的
[解决办法]
给个例子吧:
C/C++ code
// cat count.h# ifndef _COUNT_H_# define _COUNT_H_extern int counter;int get_counter();void set_counter(int);# endif // _COUNT_H_
[解决办法]
gcc -Wall -o main main.c count.c
Linux没有问题。
如果是Windows下面,你要把这些文件都加到工程里面去。

[解决办法]
假定有以下几个头文件及其包含关系为:

  File1.h,file2.h,file3.h,file4.h,file5.h,main.cpp

  那么:file3.h包含file1.h,file2.h,file4.h包含file1.h,file2.h,file5.h包含file3.h,file4.h。如许就会导致在file5中对file1和file2的反复包含,编译时就会报错。

  解决方法:

  1:应用#ifndef

  #define

  #endif

  即每个文件在定义时都写成以下情势(以file1.h为例):

  #ifndefH_FILE1

  #defineH_FILE1

  #include<stdio.h>

  #include<math.h>

  …..

  #endif

  File3.h:#ifndefH_FILE3

  #defineH_FILE3

  #include<stdio.h>

  #include<math.h>

  #inlcude”file1.h”

  #include”file2.h”

  …..

  #endif

  方法二:在每个文件的头部定义:#pragmaonce(用于解释本文件中的内容只应用一次)

  例:fiel1.h:

  #pragmaonce

  #include<stdio.h>

  #include<math.h>

  …..

  File3.h:



  #pragmaonce

  #include<stdio.h>

  #include<math.h>

  #include”file1.h”

  …..


热点排行