具体说是这样的头文件"file1.h"里定义了一个宏变量#define MAXSIZE和一个结构体 typedef struct ...... List;头文件"file2.h"里也定义了同样的宏变量和结构体那么有一个源文件"c1.c"里同时用到了这两个头文件两个头文件也同时声明了这个源文件里的函数#include"file1",include"file2";运行时报错为重复定义该怎么解决如果此源文件在某一次运行时我只想使用其中一个头文件,但又想把两个头文件都包含进去,不产生重复定义的问题该怎么办
<file1.h>#ifdef MAXSIZE
#else
#define MAXSIZE
typedef struct tdate
{
int year;
int month;
int day;
}list;#endif
<file2.h>#ifdef MAXSIZE
#else
#define MAXSIZE
typedef struct tdate
{
int year;
int month;
int day;
}list;#endif
<file.c>#include <iostream.h>
#include "htest1.h"
#include "htest2.h"
void main()
{
tdate sd;
sd.year=2010;
sd.month=9;
sd.day=14;
cout<<sd.year<<"年"<<sd.month<<"月"<<sd.day<<"日"<<endl;
}现在明白了么?
#else
#define MAXSIZE
typedef struct tdate
{
int year;
int month;
int day;
}list;#endif
<file2.h>#ifdef MAXSIZE
#else
#define MAXSIZE
typedef struct tdate
{
int year;
int month;
int day;
}list;#endif
<file.c>#include <iostream.h>
#include "htest1.h"
#include "htest2.h"
void main()
{
tdate sd;
sd.year=2010;
sd.month=9;
sd.day=14;
cout<<sd.year<<"年"<<sd.month<<"月"<<sd.day<<"日"<<endl;
}现在明白了么?
温馨提示:答案为网友推荐,仅供参考
第1个回答 2013-08-13
谁掌握了带事务处理的Web,谁就掌握了Web。 这几年来,一直盲从的跟随着周围人的技术趋势,从没有认真去研究过这个世界究竟发生了怎样的变化。结合自己的经历和网上所了解的一些信息来帮助自己认清楚Web这个世界的变化和对我个人的影响。 做Web技术工作多年,Web的发展一直影响着我们的技术趋势。谈Web的发展就不可能不提到Web1.0和Web2.0,这不是技术性的概念,而是web发展历史断代的成果。回忆初识网络及从事网络技术工作,生活中的一些细节和琐碎片段一直间接的反映着Web发展所带来的技术趋势变化。 Web1.0时代,任何一个会上网的人都不可能不知道Html(Hypertext Markup Language:超文本标记语言),而那时候网络提供的是一种信息浏览和简单信息交互的平台,讲求的是门户,内容,商业模式等。ASP,PHP,CGI等技术已经能基本上满足中小企业电子商务及信息发布平台建设的需要。而ASP,CGI等技术由于其自身的局限性已经不能满足各行各业各种深层次的需求而被迫走向灭亡。从互联网的发展和从事网络技术被看好以来,有着各种汇编语言背景的程序员就根据自身的语言背景去选择与他们所掌握语言相近的脚本语言,如C语言或Perl语言的程序员可能会去选择学习PHP等。而ASP作为一种服务器端脚本由于其可以包含HTML标记、普通文本、脚本命令以及微软强大的COM组件支持功能而成为很多网页爱好者学习的主流。 但是无论当初你是多么喜欢和欣赏ASP,它即将走向灭亡的趋势都是不可逆转的。除非你将自己的技能排在网络开发的技术之外,或者你比较守旧,喜欢死守过时的技能不放。否则你必须根据技术的发展趋势去选择一种在未来世界更加畅通的WEB开发技术。在J2EE和.NET两种平台即将成为主流的环境下,选择JSP还是C#又成为了Web开发的一次选择。 虽然偶当时基本掌握的ASP和使用ODBC通过ADO连接数据库的技术全部继承微软但偶还真没对微软有多么深厚的感情。当所有同事们都包含热情去学习.NET的并怂恿我也去了解一些C#知识的时候,我却更看好JSP。JSP超越ASP和PHP以及有着强大的JAVA语言做后盾使我更热衷学习。 几种语言的比较:ASP:<% ="Hello,world"%>PHP:<? ECHO "Hello,World!"; ?>JSP:<% out.print("Hello,World!"); %>JAVA:public class HelloWorld }C#:public class HelloWorld}先扔掉支持ASP的IIS服务器改用支持JAVA应用程序的Tomcat,使用JDBC-ODBC桥来实现ACCESS数据库连接,最后干脆将微软全部弃用直接使用JDBC连接MYSQL或其他数据库。 从最简单的JSP+JavaBean到JSP+Servlet+JavaBean开始,也就是所谓的JSP的Model1和Model2模式。JSP有JAVA语言做背景使它自身的发展也逐渐走向规范。采用Model1模式执行一个往数据库里插入数值的动作,你可以有多种方式去实现,如果你是JAVA程序员擅长写JAVA代码,你可以写2个BEAN文件和2个JSP文件,第1个BEAN用来封装数据,第2个BEAN用来执行插入数据的业务,第1个JSP用来设置表单,第2个JSP用来调用JAVABEAN来执行操作。当然你也可以使用隐藏表单为数据赋值的方式通过JSP页面将数据提交给负责调用由BEAN写的连接池的页面来做出相同的动作。实际上就是用JSP做视图,用BEAN去处理数据。但是无论你使用哪种方法去大量使用这种模式时都会带来一个副作用,那就是会导致在页面里嵌入大量的JAVA控制代码或大量的JSP语句,JSP页面的源码会变得非常臃肿。当要处理的业务逻辑复杂时,采用这种模式就会变得异常困难。所以三层数据结构表现的构想将会成为实现解决JSP数据逻辑和业务逻辑分离的一种机制。这样就有了JSPModel2模型,在JSP的Model2模式中增加了使用Servlet处理业务逻辑,JSP做视图,JAVABEAN连接两者而并只负责连接数据库和对数据业务进行处理的模型机制使M-V-C框架逐渐变得更合理更科学。这样的框架也就成为了J2EE Web框架的发展
如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快! vae.la
如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快! vae.la
第2个回答 2013-08-13
#ifndef MYSTURCT#define MYSTURCTtypedef struct ...... List;#endif引用#define MYSTURCT