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