#include <assert.h>
template <class NODETYPE>
class List
{
typedef bool (*COMPAREFUNC)(NODETYPE compnum,NODETYPE arraynum);
typedef bool (*TRAVERFUNC)(NODETYPE);
public:
List(int number);
~List();
bool DestroyList(); //销毁链表
bool ClearList(); //清空链表
bool ListEmpty(); //测试是否为空
int ListLength();
bool GetElem(int i,NODETYPE &node); //得到第i个节点的值
NODETYPE GetElem(int i); //得到第i个节点的值
int LocateElem(NODETYPE node,COMPAREFUNC compare); //比较node与链表中的值,返回第一个满足条件的节点的位置
NODETYPE GetPriorElem(NODETYPE cur_e); //返回上一个节点
NODETYPE GetNextElem(NODETYPE cur_e); //返回下一个节点
bool ListInsert(int i,NODETYPE node); //在i位子插入值
bool ListDelete(int i); //删除i节点的值
bool ListTraverse(TRAVERFUNC visit); //遍历节点
bool CompareEqual(NODETYPE compnum,NODETYPE arraynum); //等于比较
bool CompareAbove(NODETYPE compnum,NODETYPE arraynum); // 大于比较
bool CompareBelow(NODETYPE compnum,NODETYPE arraynum); //小于比较
private:
NODETYPE *array;
int length; //申请空间大小
int cur_length; //当前长度
};
template <class NODETYPE>
List<NODETYPE>::List(int number)
{
array=new NODETYPE[number];
length=number;
cur_length=0;
cout<<"constructor is used"<<endl;
}
template <class NODETYPE>
bool List<NODETYPE>::ListInsert(int i,NODETYPE node)
{
if(i>-1&&i<=cur_length&&cur_length<length)
{
cur_length++;
for(int k=cur_length;k>i;k--)
array[k]=array[k-1];
array[i]=node;
return true;
}
return false;
}
template <class NODETYPE>
int List<NODETYPE>::LocateElem(NODETYPE node,COMPAREFUNC compare)
{
for(int i=0;i<cur_length;i++)
if(compare(node,array[i]))
return i;
else return -1;
}
template <class NODETYPE>
bool List<NODETYPE>::CompareEqual(NODETYPE compnum,NODETYPE arraynum)
{
if(compnum==arraynum)
return true;
else return false;
}
void main()
{
List<int> a(30);
for(int i=0;i<20;i++)
a.ListInsert(i,i);
cout<<a.GetElem(LocateElem(9,a.CompareEqual));
}
为什么编译的时候会出现
e:\code\cpp11.cpp(77) : error C2065: 'LocateElem' : undeclared identifier
这样的错呀。
22 个解决方案
#1
LocateElem是类的一个成员函数呀,怎么可以这么调用呢?得给它个对象吧!
太粗心了。
太粗心了。
#2
'LocateElem是成员函数,不能直接调用,用对象调用吧
#3
谢谢楼上指点。但是我把cout<<a.GetElem(LocateElem(9,a.CompareEqual));
改为cout<<a.GetElem(a.LocateElem(9,a.CompareEqual));
却发现E:\code\Cpp1.cpp(204) : error C2664: 'LocateElem' : cannot convert parameter 2 from 'bool (int,int)' to 'bool (__cdecl *)(int,int)'
这是什么意思,望高手指点
改为cout<<a.GetElem(a.LocateElem(9,a.CompareEqual));
却发现E:\code\Cpp1.cpp(204) : error C2664: 'LocateElem' : cannot convert parameter 2 from 'bool (int,int)' to 'bool (__cdecl *)(int,int)'
这是什么意思,望高手指点
#4
问两个问题
调用头文件是干什么用的
还有你的类中的
typedef bool (*COMPAREFUNC)(NODETYPE compnum,NODETYPE arraynum);
是什么意思 为什么后面还有(NODETYPE compnum,NODETYPE arraynum);
谢谢
调用头文件是干什么用的
还有你的类中的
typedef bool (*COMPAREFUNC)(NODETYPE compnum,NODETYPE arraynum);
是什么意思 为什么后面还有(NODETYPE compnum,NODETYPE arraynum);
谢谢
#5
意思是说你的=两边的值类型不匹配。
#6
to znnren(小宁宁)
typedef bool (*COMPAREFUNC)(NODETYPE compnum,NODETYPE arraynum);这是定义了函数指针类型COMPAREFUNC
头文件在其他函数定义中会用到
typedef bool (*COMPAREFUNC)(NODETYPE compnum,NODETYPE arraynum);这是定义了函数指针类型COMPAREFUNC
头文件在其他函数定义中会用到
#7
望高人帮我修改一下。在下感激!!!!!!!!!!!!
#8
int i = a.GetElem(a.LocateElem(9,a.CompareEqual));
cout<<a.GetElem(i);
cout<<a.GetElem(i);
#9
楼上的我试了,但是还是发生一样的错误
#10
帮忙呀!!!!!!!!!!!!!!
#11
help
#12
help
#13
问题解决了九散分
#14
很复杂
#15
为什么会这样呀???????
#16
会不会是 函数指针的问题呀?
#17
帮忙呀!
#18
这是因为函数
bool CompareEqual(NODETYPE compnum,NODETYPE arraynum);
是一个成员函数,具有隐含的this指针,而你定义的函数指针
typedef bool (*COMPAREFUNC)(NODETYPE compnum,NODETYPE arraynum);
只有两个参数引起的
bool CompareEqual(NODETYPE compnum,NODETYPE arraynum);
是一个成员函数,具有隐含的this指针,而你定义的函数指针
typedef bool (*COMPAREFUNC)(NODETYPE compnum,NODETYPE arraynum);
只有两个参数引起的
#19
cout<<a.GetElem(a.LocateElem(9,a.CompareEqual));
你的CompareEqual也是个函数吧 既然是 那么后面为什么没有()呢!?
按照你的代码,应该是还包含参数的!
是吧!
仔细看看哦!
#20
我还是给你举个简单的例子吧
class CTest
{
typedef int (*pf_type)(int a,int b);
public:
int kkkk(int a,pf_type pfunc){return a;}
int mFun(int a,int b){return a;}
};
int main(void)
{
CTest test;
test.kkkk(3,test.mFun);
return 1;
}
此程序编译会发生如下情况:
Compiling...
Text1.cpp
F:\guobf\patch\Text1.cpp(15) : error C2664: 'kkkk' : cannot convert parameter 2 from 'int (int,int)' to 'int (__cdecl *)(int,int)'
None of the functions with this name in scope match the target type
Error executing cl.exe.
Text1.exe - 1 error(s), 0 warning(s)
改成下面以后编译通过
class CTest
{
typedef int (*pf_type)(int a,int b);
public:
int kkkk(int a,pf_type pfunc){return a;}
static int mFun(int a,int b){return a;}
};
int main(void)
{
CTest test;
test.kkkk(3,test.mFun);
return 1;
}
说到底,就是类的非静态成员函数搞的鬼
class CTest
{
typedef int (*pf_type)(int a,int b);
public:
int kkkk(int a,pf_type pfunc){return a;}
int mFun(int a,int b){return a;}
};
int main(void)
{
CTest test;
test.kkkk(3,test.mFun);
return 1;
}
此程序编译会发生如下情况:
Compiling...
Text1.cpp
F:\guobf\patch\Text1.cpp(15) : error C2664: 'kkkk' : cannot convert parameter 2 from 'int (int,int)' to 'int (__cdecl *)(int,int)'
None of the functions with this name in scope match the target type
Error executing cl.exe.
Text1.exe - 1 error(s), 0 warning(s)
改成下面以后编译通过
class CTest
{
typedef int (*pf_type)(int a,int b);
public:
int kkkk(int a,pf_type pfunc){return a;}
static int mFun(int a,int b){return a;}
};
int main(void)
{
CTest test;
test.kkkk(3,test.mFun);
return 1;
}
说到底,就是类的非静态成员函数搞的鬼
#21
因为非静态成员函数暗含了this指针
#22
是不是可以结帖拉?
#1
LocateElem是类的一个成员函数呀,怎么可以这么调用呢?得给它个对象吧!
太粗心了。
太粗心了。
#2
'LocateElem是成员函数,不能直接调用,用对象调用吧
#3
谢谢楼上指点。但是我把cout<<a.GetElem(LocateElem(9,a.CompareEqual));
改为cout<<a.GetElem(a.LocateElem(9,a.CompareEqual));
却发现E:\code\Cpp1.cpp(204) : error C2664: 'LocateElem' : cannot convert parameter 2 from 'bool (int,int)' to 'bool (__cdecl *)(int,int)'
这是什么意思,望高手指点
改为cout<<a.GetElem(a.LocateElem(9,a.CompareEqual));
却发现E:\code\Cpp1.cpp(204) : error C2664: 'LocateElem' : cannot convert parameter 2 from 'bool (int,int)' to 'bool (__cdecl *)(int,int)'
这是什么意思,望高手指点
#4
问两个问题
调用头文件是干什么用的
还有你的类中的
typedef bool (*COMPAREFUNC)(NODETYPE compnum,NODETYPE arraynum);
是什么意思 为什么后面还有(NODETYPE compnum,NODETYPE arraynum);
谢谢
调用头文件是干什么用的
还有你的类中的
typedef bool (*COMPAREFUNC)(NODETYPE compnum,NODETYPE arraynum);
是什么意思 为什么后面还有(NODETYPE compnum,NODETYPE arraynum);
谢谢
#5
意思是说你的=两边的值类型不匹配。
#6
to znnren(小宁宁)
typedef bool (*COMPAREFUNC)(NODETYPE compnum,NODETYPE arraynum);这是定义了函数指针类型COMPAREFUNC
头文件在其他函数定义中会用到
typedef bool (*COMPAREFUNC)(NODETYPE compnum,NODETYPE arraynum);这是定义了函数指针类型COMPAREFUNC
头文件在其他函数定义中会用到
#7
望高人帮我修改一下。在下感激!!!!!!!!!!!!
#8
int i = a.GetElem(a.LocateElem(9,a.CompareEqual));
cout<<a.GetElem(i);
cout<<a.GetElem(i);
#9
楼上的我试了,但是还是发生一样的错误
#10
帮忙呀!!!!!!!!!!!!!!
#11
help
#12
help
#13
问题解决了九散分
#14
很复杂
#15
为什么会这样呀???????
#16
会不会是 函数指针的问题呀?
#17
帮忙呀!
#18
这是因为函数
bool CompareEqual(NODETYPE compnum,NODETYPE arraynum);
是一个成员函数,具有隐含的this指针,而你定义的函数指针
typedef bool (*COMPAREFUNC)(NODETYPE compnum,NODETYPE arraynum);
只有两个参数引起的
bool CompareEqual(NODETYPE compnum,NODETYPE arraynum);
是一个成员函数,具有隐含的this指针,而你定义的函数指针
typedef bool (*COMPAREFUNC)(NODETYPE compnum,NODETYPE arraynum);
只有两个参数引起的
#19
cout<<a.GetElem(a.LocateElem(9,a.CompareEqual));
你的CompareEqual也是个函数吧 既然是 那么后面为什么没有()呢!?
按照你的代码,应该是还包含参数的!
是吧!
仔细看看哦!
#20
我还是给你举个简单的例子吧
class CTest
{
typedef int (*pf_type)(int a,int b);
public:
int kkkk(int a,pf_type pfunc){return a;}
int mFun(int a,int b){return a;}
};
int main(void)
{
CTest test;
test.kkkk(3,test.mFun);
return 1;
}
此程序编译会发生如下情况:
Compiling...
Text1.cpp
F:\guobf\patch\Text1.cpp(15) : error C2664: 'kkkk' : cannot convert parameter 2 from 'int (int,int)' to 'int (__cdecl *)(int,int)'
None of the functions with this name in scope match the target type
Error executing cl.exe.
Text1.exe - 1 error(s), 0 warning(s)
改成下面以后编译通过
class CTest
{
typedef int (*pf_type)(int a,int b);
public:
int kkkk(int a,pf_type pfunc){return a;}
static int mFun(int a,int b){return a;}
};
int main(void)
{
CTest test;
test.kkkk(3,test.mFun);
return 1;
}
说到底,就是类的非静态成员函数搞的鬼
class CTest
{
typedef int (*pf_type)(int a,int b);
public:
int kkkk(int a,pf_type pfunc){return a;}
int mFun(int a,int b){return a;}
};
int main(void)
{
CTest test;
test.kkkk(3,test.mFun);
return 1;
}
此程序编译会发生如下情况:
Compiling...
Text1.cpp
F:\guobf\patch\Text1.cpp(15) : error C2664: 'kkkk' : cannot convert parameter 2 from 'int (int,int)' to 'int (__cdecl *)(int,int)'
None of the functions with this name in scope match the target type
Error executing cl.exe.
Text1.exe - 1 error(s), 0 warning(s)
改成下面以后编译通过
class CTest
{
typedef int (*pf_type)(int a,int b);
public:
int kkkk(int a,pf_type pfunc){return a;}
static int mFun(int a,int b){return a;}
};
int main(void)
{
CTest test;
test.kkkk(3,test.mFun);
return 1;
}
说到底,就是类的非静态成员函数搞的鬼
#21
因为非静态成员函数暗含了this指针
#22
是不是可以结帖拉?