c++ 函数指针调用函数的问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 10:35:12
这是在用类来实现线性表的实例,其中用到函数指针调用函数,但是不知道什么地方出错了,请指教!

#include<iostream>
using namespace std;

const int TRUE=1;
const int FALSE=0;
const int OK=1;
const int ERROR=0;
const int OVERFLOW=-2;
const int UNABLE=-1;

typedef bool cmp(int,int);

class list
{
//顺序表的参数
int *elem; //顺序表基址,这里以元素为整型
int length; //当前长度
int listsize; //当前分配的存储量
static const int LIST_INIT_SIZE=100;
static const int LIST_INCREASE=10;

public:
//基本操作
bool InitList(); //创建顺序表,成功返回TRUE,失败返回FALSE
void DestroyList(); //销毁顺序表,不需要返回值。

void ClearList(); //清空顺序表,不需要返回值。
bool ListInsert(int i,int e); //插入数据,在第i个位置,以e为数据
bool ListDelete(int i,int &e); //删除数据,在第i个位置,以e输出被删数。
bool ListTraverse(bool (*visit)(int)); //遍历顺序表,visit为函数指针

bool ListEmpty(); //判断是否空表
int ListLength(); //返回表的长度
bool GetElem(int i,int &e); //取第i

这题我仔细看了下,因为好久没看C语言的程序了,有点陌生呢!
不过我发现问题了,你看啊:
place=LocateElem(cur_e,equal); //这里是140行
这里你调用equal了,但是现在equal是什么呢?它存在吗?我试了下,把equal函数写成静态的,或者在类外面定义equal的话,这里都不会有错,这说明什么呢?equal,作为一个类的内部方法,在这个类没实例化对象的时候,它是不存在的,这样说我自己都感觉不大对,但是要是这样想,equal,作为一个函数指针(指针也是变量啊),它是这个类内部的一个变量,在这个类没实例化对象的时候,它是没有意义的。这样好像可以说得通,到底对不对,还请真正的高手指教!

PS:关于上面程序的修改:
static cmp equal; //定义比较函数:相等
即在声明equal的时候前面加上static,使它变成静态的,其它的地方都不用改了


typedef bool cmp(int,int);
修改为
typedef bool (*cmp)(int,int);