自定义的类中包含一个函数可以吗?

zzol 2004-12-23 09:31:03
我自定义了一个类:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
#include "rbg.h"
#include "horizonangle.h"


class curve{

public:
double startp_x,startp_y,ZH_x,ZH_y;
double HY_x,HY_y,YH_x,YH_y;

void compute();
}
^^^^^^^^^^^^^^^^^^^^^^^^^^

结果显示rbg.h(2) : error C2065: 'a' : undeclared identifier等等
#include "rbg.h"是自己定义的一个函数,
是什么问题?

...全文
96 点赞 收藏 12
写回复
12 条回复
cat_dog 2004年12月24日
zzol():
你上面的最后一个参数也写错了double (*f)( double )
所以把函数定义改成 double romb(double a,double b,double eps,double (*f)(double))
就行了,其它的把你后面实现的接下去写就行了
回复 点赞
zzol 2004年12月24日
不会吧,浩强老师的《C语言程序设计》一书中就是这样写的。如果改成
double romb(double a,double b,double eps,double (*f)())
那么调用这个函数时,最后一个参数怎么写?假如要求X*X*X+3*X*X+1在[1,10]上的积分值,怎么调用该函数?
回复 点赞
zzol 2004年12月23日
rbg.h是一个积分的函数,在C条件下是完全通过,没有问题的。

#include <math.h>
double romb(a,b,eps,f)
double a,b,eps,(*f)();

{
int m,n,i,k;
double y[10],h,ep,p,x,s,q;

// 迭代初值
h=b-a;
y[0]=h*((*f)(a)+(*f)(b))/2.0;
m=1;
n=1;
ep=eps+1.0;

if(h==0)
return 0;


// 迭代计算
while ((ep>=eps)&&(m<=9))
{
p=0.0;
for (i=0;i<=n-1;i++)
{
x=a+(i+0.5)*h;
p=p+(*f)(x);
}

p=(y[0]+h*p)/2.0;
s=1.0;
for (k=1;k<=m;k++)
{
s=4.0*s;
q=(s*p-y[k-1])/(s-1.0);
y[k-1]=p;
p=q;
}

ep=fabs(q-y[m-1]);
m=m+1;
y[m-1]=q;
n=n+n;
h=h/2.0;
}

return(q);
}
回复 点赞
cat_dog 2004年12月23日
把rbg.h贴出来
回复 点赞
liweiswin 2004年12月23日
2楼正解。楼主代码没有贴全
回复 点赞
sunlu_eric 2004年12月23日
用友员不就可以了么???
回复 点赞
Barrypanxmeng 2004年12月23日
楼主是不是应该把rbg.h中的文件内容贴出来,我是说可能
#include "rbg.h"
#include "horizonangle.h"
文件中有错误
类定义后面要有一个“;”
class curve
{
...
};
回复 点赞
dudu妈 2004年12月23日
自定义得类中包含一个函数是可以得。可能你的函数有点问题
回复 点赞
hxblvc 2004年12月23日
去"rbg.h"里边找错.
回复 点赞
snow810211 2004年12月23日
应该不行,成员函数不是普通函数,普通函数不能访问protected成员,而成员函数可以
回复 点赞
BluntBlade 2004年12月23日
未声明的标识符'a'
回复 点赞
cat_dog 2004年12月23日
第二句,也就下面那句不能那样写
double romb(a,b,eps,f)
a必须有类型
double romb(a,b,eps,f)
double a,b,eps,(*f)();
可以改成
double romb(double a,double b,double eps,double (*f)())
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告