Mình có đoạn code như bên dưới, khi biên dịch thì có xuất hiện lỗi tại vị trí mình comment. Mình đã thêm & vào trước thì lỗi chuyển sang “cannot convert …” (cái này mình hiểu). Mình đã tìm trên stackoverflow về truyền template function nhưng vẫn chưa fix được. Mong mọi người có thể giúp mình. Mình cảm ơn!
template<class T>
class BNode {
public:
T data;
BNode *pLeft, *pRight;
BNode(T a) :data(a), pLeft(NULL), pRight(NULL) {}
};
template<class T>
class BSTree {
BNode<T> *pRoot;
public:
void traverseDF(int mode);
void display() { display<T>(pRoot); }
private:
void traverseDF(BNode<T> *pF, bool(*p)(T));
void display(T a);
};
template<class T>
void BSTree<T>::traverseDF(int mode) {
if (mode == 1)
traverseDF(pRoot, display); // Error C3867 'BSTree<T>::display': non-standard syntax; use '&' to create a pointer to member
}
template<class T>
void BSTree<T>::traverseDF(BNode<T> *pF, bool(*p)(T)) {
if (pF == NULL) return;
traverseDF(pF->pLeft, p);
traverseBF(pF->pRight, p);
(*p)(pF->data);
}