头文件重复定义有关问题

头文件重复定义问题
头文件 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 100

struct 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 100

struct 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 100

int 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: