我猜你出现问题是在编译的时候没有保存,在运行连接的时候报出的重定义错误,而且你的类定义是在名为image.h的头文件中定义的,在多个配李*.cpp中包含了该头文件。
(#ifndef…#define…#endif 这个的用法其实跟楼上说的#program once 差不多,都是问了防止重定义而设定的,但是两者之间还是有一些区别。具体的区别你可以从网上看一下。)
编译过程分为编译和链接
编译之前有一个预处理
编译的最小单位是单个文件
也就说预处理的最小单位也是单个文件
如果定义了头文件test.h
#ifndef _TEST_H
#define _TEST_H
int a
int b
int c
#endif
假设工程中有 a.cpp b.cpp两个文件 都包含了test.h
那么对a编译的时候, test只包含一次 生成的 a.o 中包含了 a_s32 b_s32(即你定义的变量)
对b编译的时候同样会包含globle.h 而且只包含一次
所谓只包含一次 是在单个cpp文件中只包含一次
这样在object中就会有多个相同命名的变量被包含进去
链接的培或迟时候就会出错
出错不会出现在编译过程中的
一般的做法是,在cpp文件中定义变量,然后在头文件中用extern 声明变量,这样在其他cpp文件中再包含头文件就团州可以。
你可以试试,只是我从你给出来的东西的猜测
其实挺简单的,注意我写的注释!<%@ page contentType="text/htmlcharset=GB2312" %>
<%@ page import="org.jfree.chart.JFreeChart,org.jfree.chart.ChartUtilities,
org.jfree.chart.ChartFactory,
org.jfree.chart.plot.PlotOrientation,
org.jfree.data.category.DefaultCategoryDataset"%> //上面是需要添加的头文件
<html>
<body>
<%
String dataName[]=new String[]{"0-30岁","30-50岁","50-70岁","70岁以上"}//显示数据系列
int dataValueCount[]={4,5,4,6}//数据系列对应的值
//以上两行可以从数据库里去取值,用循环写入数组
//------创建数据集,并设置值------
DefaultCategoryDataset categoryDataset = newDefaultCategoryDataset()//这个表示柱状图
for(int i=0i<dataName.lengthi++)
categoryDataset.addValue(dataValueCount[i],dataName[i],dataName[i])//循环写入数据集
String titleString="用户年龄阶段分布统计图"//图的标题
JFreeChart chart = ChartFactory.createBarChart(titleString,"用户年龄阶段","数量",
categoryDataset,PlotOrientation.VERTICAL,true,true,false)//chart就是欲创建的图表
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,500,300)//这行的意思是输出成一个JPEG形式的文件显示
%>
</body>
</html>
其实后面还有很多参数卖镇的,比如颜色,柱子的标题等等,太多属性了,这个你查看一下JFREECHART的文档就行了,比如下面这样,很容易吧。
Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12)
/*
* VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关橘雹闭,
* 使用的关闭抗锯齿后,字体尽量选择12到14号的宋体字,这样文字最清晰好看
*/
// chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF)
chart.setTextAntiAlias(false)
chart.setBackgroundPaint(Color.white)
// create plot
CategoryPlot plot = chart.getCategoryPlot()
// 设置横虚线可见
plot.setRangeGridlinesVisible(true)
// 虚线色彩
plot.setRangeGridlinePaint(Color.gray)
// 数据轴精度
NumberAxis vn = (NumberAxis) plot.getRangeAxis()
// vn.setAutoRangeIncludesZero(true)
DecimalFormat df = new DecimalFormat("#0.00")
vn.setNumberFormatOverride(df)// 数据轴数据标签的显示格式中伍粗
// x轴设置
CategoryAxis domainAxis = plot.getDomainAxis()
domainAxis.setLabelFont(labelFont)// 轴标题
domainAxis.setTickLabelFont(labelFont)// 轴数值
属性比较多,不可能全贴出来,也不必全用,设置一些实用的属性即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)