Έχω σήμερα μια δυαδική ρύθμιση δένδρο αναζήτησης, χρησιμοποιώντας πρότυπα για να μου επιτρέψει να αλλάξετε εύκολα τον τύπο των δεδομένων στο πλαίσιο του δυαδικού δένδρου αναζήτησης. Αυτή τη στιγμή, είμαι έχοντας προβλήματα υπερφόρτωσης την κατηγορία studentRecord που περιέχει τα δεδομένα να αποθηκεύονται στο δέντρο. Θα πρέπει να επιβαρύνει τους τελεστές σύγκρισης σε αυτή την κατηγορία, έτσι ώστε BST μου να συγκρίνετε σωστά δύο αντικείμενα που βασίζεται σε ένα από τα περιεχόμενά τους (σε αυτή την περίπτωση, ο φοιτητής ID). Ωστόσο, παρά την υπερφόρτωση των φορέων εντός studentRecord, η σωστή σύγκριση εξακολουθούν να μην εμφανίζονται.
Λεπτομέρειες παρακάτω:
Προς το παρόν, η studentTree αντικείμενο BST έχει δημιουργηθεί, του τύπου
bst<studentRecord *> studentTree;
studentRecord είναι η ακόλουθη κατηγορία:
// studentRecord class
class studentRecord{
public:
// standard constructors and destructors
studentRecord(int studentID, string lastName, string firstName, string academicYear){ // constructor
this->studentID=studentID;
this->lastName=lastName;
this->firstName=firstName;
this->academicYear=academicYear;
}
friend bool operator > (studentRecord &record1, studentRecord &record2){
if (record1.studentID > record2.studentID)
cout << Greater! << endl;
else
cout << Less then! << endl;
return (record1.studentID > record2.studentID);
}
private:
// student information
string studentID;
string lastName;
string firstName;
string academicYear;
};
Κάθε φορά που τα νέα στοιχεία προστίθενται στο BST μου, θα πρέπει να συγκριθούν μεταξύ τους. Ως εκ τούτου, Ήθελα να αποφευχθεί η συμφόρηση των τάξη studentRecord, έτσι ώστε όταν συμβαίνει αυτή η διαδικασία σύγκρισης, οι studentIDs σύγκριση (όπως αλλιώς, μια μη έγκυρη σύγκριση θα γίνει).
Ωστόσο, η λειτουργία εισαγωγής μου ποτέ δεν χρησιμοποιεί υπερφορτωμένες λειτουργίες σύγκρισης μου. Αντ 'αυτού, φαίνεται να συγκρίνει τα δύο αντικείμενα κάποιο άλλο τρόπο, με αποτέλεσμα την μη έγκυρη διαλογή μέσα στο BST. Μέρος του ένθετου λειτουργίας μου είναι κάτω - είναι σημαντικό να σημειωθεί ότι τόσο toInsert και nodePtr-> δεδομένα πρέπει να είναι τύπου studentRecord, λόγω της που λαμβάνει χώρα η διαδικασία προτυποποίησης.
// insert (private recursive function)
template<typename bstType>
void bst<bstType>::insert(bstType & toInsert, bstNodePtr & nodePtr){
// check to see if the nodePtr is null, if it is, we've found our insertion point (base case)
if (nodePtr == NULL){
nodePtr = new bst<bstType>::bstNode(toInsert);
}
// else, we are going to need to keep searching (recursive case)
// we perform this operation recursively, to allow for rotations (if AVL tree support is enabled)
// check for left
else if (toInsert < (nodePtr->data)){ // go to the left (item is smaller)
// perform recursive insert
insert(toInsert,nodePtr->left);
// AVL tree sorting
if(getNodeHeight(nodePtr->left) - getNodeHeight(nodePtr->right) == 2 && AVLEnabled)
if (toInsert < nodePtr->left->data)
rotateWithLeftChild(nodePtr);
else
doubleRotateWithLeftChild(nodePtr);
}
Επίσης, εδώ είναι ένα τμήμα της τάξης BST defintion
// BST class w/ templates
template <typename bstType>
class bst{
private: // private data members
// BST node structure (inline class)
class bstNode{
public: // public components in bstNode
// data members
bstType data;
bstNode* left;
bstNode* right;
// balancing information
int height;
// constructor
bstNode(bstType item){
left = NULL;
right = NULL;
data = item;
height = 0;
}
// destructor
// no special destructor is required for bstNode
};
// BST node pointer
typedef bstNode* bstNodePtr;
public: // public functions.....
Οποιεσδήποτε ιδέες για το τι μπορεί να προκαλεί αυτό; Είμαι υπερφόρτωση λάθος κατηγορία ή λάθος λειτουργία; Οποιαδήποτε βοήθεια είναι ευπρόσδεκτη - μου φαίνεται να χάνονται αφού είναι τόσα πολλά διαφορετικά πράγματα που συμβαίνουν ταυτόχρονα.













