나는 목록에서 재귀 함수를 사용하고 있습니다 :포인터 및 검색 기능을 수정 및 인쇄 기능을 추가하여 (ADT 파일을) 재귀
template <class TYPE, class KTYPE>
bool List<TYPE, KTYPE> :: _search (NODE<TYPE> **pPre,
NODE<TYPE> **pLoc,
KTYPE key)
{
if ((*pLoc) == NULL)
return false;
else
if (key == (*pLoc)->data.key)
return true;
_search ((*pPre)->link ,(*pLoc)->link, key);
return false;
}
template <class TYPE, class KTYPE> bool List<TYPE, KTYPE> :: _search (NODE<TYPE> **pPre, NODE<TYPE> **pLoc, KTYPE key) { if ((*pLoc) == NULL) return false; else if (key == (*pLoc)->data.key) return true; _search ((*pPre)->link ,(*pLoc)->link, key); return false; }
는하지만에 오류가
_search ((*pPre)->link ,(*pLoc)->link, key);
오류 :
error C2664: 'List<TYPE,KTYPE>::_search' : cannot convert parameter 1 from 'NODE<TYPE> *' to 'NODE<TYPE> **'
왜 그런지 모르시겠습니까? 추가 및 삭제 * 시도했지만 여전히 제대로 이해하지 못합니다.
내가 초기화 :
NODE <TYPE> * pPre;
pPre = NULL;
NODE <TYPE> * pLoc ;
pLoc = NULL;
NODE <TYPE> * pPre; pPre = NULL; NODE <TYPE> * pLoc ; pLoc = NULL;
기능이 기능은 메모리에 pPre 및 pLoc의 위치를 반환
라고, 그래서 함수 서명이 **
를 사용해야하기 전에.
내가 전화하는 방식을 변경해야한다는 것을 알고 있지만, 어떻게해야합니까? 이 NODE
포인터 포인터되어야 반면
template <class TYPE>
struct NODE
{
TYPE data;
NODE *link;
};
struct Student
{
string name ;
int level;
int key;
};
template <class TYPE, class KTYPE>
class List
{
private:
NODE<TYPE> *head;
NODE<TYPE> *pos;
NODE<TYPE> *rear;
int count;
....
....
....
....
....
};
template <class TYPE> struct NODE { TYPE data; NODE *link; }; struct Student { string name ; int level; int key; }; template <class TYPE, class KTYPE> class List { private: NODE<TYPE> *head; NODE<TYPE> *pos; NODE<TYPE> *rear; int count; .... .... .... .... .... };
ostream & operator << (ostream & out , Student & Data)
{
out << "The name is : " << Data.name << "\nThe Level is : " << Data.level<< "\nThe ID is :"<<Data.key;
return out;
}
template<class TYPE, class KTYPE>
void List <TYPE, KTYPE > :: ReversePrint (NODE <TYPE> * node)
{
if (node== NULL)
return ;
ReversePrint (node->link);
cout << node-> data;
return ;
}