게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
함수 포인터 질문이요 ㅜㅜ [C++]
게시물ID : programmer_3089짧은주소 복사하기
작성자 : 여기인가
추천 : 0
조회수 : 1988회
댓글수 : 9개
등록시간 : 2014/05/06 07:15:45

#define MAX_HEAP 1
#define MIN_HEAP 0

typedef int setRule;
typedef int index;


template <typename T>
class Heap {
private :
Array<T> *hArr;
bool (Heap<T>::*SortRule)(int pvtKey, int cmpKey);   //밑에 있는 두놈을 저장할 함수 포인터.

private : 
bool makeMaxHeap(int pvtKey, int cmpKey);    //
bool makeMinHeap(int pvtKey, int cmpKey);    //  이 두놈이 함수 포인터에 저장될 놈들 입니다.

public :  //단순 기능을 하는 메소드
Heap(int cap = 100);
~Heap();
bool isEmpty();
int getParentIDX(index nowIdx);
int getL_ChildIDX(index nowIdx);
int getR_childIDX(index nowIdx);
// 최대힙, 최소힙을 만들지 결정한다.
void setSortRule(setRule rule);

public :
//우선순위가 높은 자식노드의 인덱스를 반환한다.
index getHighChildIDX(index nowIdx);

//배열이 꽉 찬 경우 배열의 길이를 확장한다.
//void expandHeap(int expandLen = 100);
void insertHeap(Node<T> item);
Node<T> deleteHeap();
};

// 문제가 되는 놈들의 정의부 입니다 

template <typename T>
bool Heap<T>::makeMaxHeap(int pvtKey, int cmpKey){
return pvtKey > cmpKey ? true : false;
}

template <typename T>
bool Heap<T>::makeMinHeap(int pvtKey, int cmpKey){
return pvtKey < cmpKey ? true : false;
}

template <typename T>
void Heap<T>::setSortRule(setRule rule){
if (rule != MAX_HEAP && rule != MIN_HEAP)
return;
else if (rule == MAX_HEAP){                                                                   
Heap<T>::SortRule = &Heap::makeMaxHeap;
}
else if (rule == MIN_HEAP){
Heap<T>::SortRule = &Heap::makeMinHeap;
}
}


template <typename T>
void Heap<T>::insertHeap(Node<T> item){
int nowIdx = hArr->getIdx() + 1; 
//(this->* funcArray[0])();


        //밑에 있는 if문에서 오류가 납니다 . 오류 내용은 항은 2개의 인수로 받아들이는 함수로 계산되지 
       // 않습니다. 이거죠. 
while (nowIdx != 1){
if (this->*SortRule(item.getKey(), hArr->arr[getParentIDX(nowIdx)].getKey())) {
hArr[nowIdx] = hArr[getParentIDX(nowIdx)];
nowIdx = getParentIDX(nowIdx);
}    
else
break;
}

hArr->addArray(nowIdx, item);  //[nowIdx] = item;
hArr->incIdx();
}

그러니까, bool SortRule(int d1,int d2) 라는 함수 포인터를 위에 처럼 호출하면, 항은 2개의 인수로 받아들이는 함수로
계산되지 않습니다. 라고 뜹니다

분명 이 오류 말고 다른오류가 엄청 수두룩 할텐데, 이거 때문에 수정을 못하고 있습니다.
구글링도 엄청 했습죠 ㅜㅜ 

기초가 부족해서 그런지 답이 안나옵니다. .. 집에 있는 기본서에 함수 포인터는 C로 아주 짤막하게 나와서 
책을 봐도 이해가 안되네요 .. 

http://blog.naver.com/sdzaq  여기선 압축파일이 안올라가 지네요 ㅜㅜ 제 블로그에 올립니다 
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호