bst input comparison template funtion error
===

This error:

error C2664: 'Set<ElemType>::Set(int (__cdecl *)(ElemType,ElemType))' : cannot convert parameter 1 from 'int (__cdecl *)(Lexicon::CorrectionT &,Lexicon::CorrectionT &)' to 'int (__cdecl *)(ElemType,ElemType)'

results from this implementation of a bst class,

    Set<Lexicon::CorrectionT> Lexicon::suggestCorrections(Lexicon::MatchesT & matchSet)
    {
    	Set<CorrectionT> suggest(compareCorr);
    	int index = 0; //baseline value
    	int editDistance = 0; //baseline value
    	suggestCorrectionsHelper(root, suggest, index, matchSet.testWord, editDistance, matchSet.testTime);
    	return suggest; //sending set up to main.cpp
    }

the comparison function compareCorr is here,

    int compareCorr(struct Lexicon::CorrectionT &a, struct Lexicon::CorrectionT &b)
    {
    	if (a.editDistance < b.editDistance)
    		return -1;
    	else if (a.editDistance == b.editDistance)
    			return 0;
    	else
    		return 1;
    }

Class Set

    Set(int (*cmpFn)(ElemType, ElemType) = OperatorCmp);

and the use of the comparison function in Set is for add

    template <typename ElemType>
    void Set<ElemType>::add(ElemType element) {
    	bst.add(element);
    }

And add in the bst class
restating header file

    BST(int (*cmpFn)(ElemType one, ElemType two) = OperatorCmp);

and the function add

    template <typename ElemType>
    bool BST<ElemType>::add(ElemType data) {
            bool createdNewNode = false;
            recAddNode(root, data, createdNewNode);
            if (createdNewNode) timestamp++;
            return createdNewNode;
    }
    
    template <typename ElemType>
    bool BST<ElemType>::recAddNode(nodeT * & t, ElemType & data,
                                   bool & createdNewNode) {
            if (t == NULL) {
                    t = new nodeT;
                    t->data = data;
                    t->bf = BST_IN_BALANCE;
                    t->left = t->right = NULL;
                    createdNewNode = true;
                    numNodes++;
                    return true;
            }
            int sign = cmpFn(data, t->data);
            if (sign == 0) {
                    t->data = data;
                    createdNewNode = false;
                    return false;
            }
            int bfDelta = 0;
            if (sign < 0) {
                    if (recAddNode(t->left, data, createdNewNode)) {
                            bfDelta = -1;   /* left subtree is higher */
                    }
            } else {
                    if (recAddNode(t->right, data, createdNewNode)) {
                            bfDelta = +1;   /* right subtree is higher */
                    }
            }
            updateBF(t, bfDelta);
            return (bfDelta != 0 && t->bf != BST_IN_BALANCE);
    }

Any idea what is going on here - what is the problem with the comparison function?