Am în prezent o configurare binar de căutare copac, folosind template-uri pentru a-mi permite să schimba cu ușurință tipul de date în arborele binar de căutare. În momentul de față, am probleme în a supraîncărca clasa studentRecord care conține datele care urmează să fie stocate în copac. Trebuie să supraîncărca operatorii de comparatie in cadrul acestei clase, astfel încât BST mea poate compara în mod corespunzător două obiecte pe baza unuia dintre conținutul lor (în acest caz, studentul ID-ul). Cu toate acestea, în ciuda supraincarcarea operatorilor din cadrul studentRecord, comparații adecvate sunt încă nu apar.
Detalii mai jos:
În momentul de față, a fost creat studentTree obiectul BST, de tip
bst<studentRecord *> studentTree;
studentRecord este următoarea clasă:
// 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;
};
Ori de câte ori elemente noi sunt adăugate la BST mea, acestea trebuie să fie comparate între ele. Prin urmare, am vrut să supraîncarce clasa studentRecord, astfel încât atunci când acest proces are loc comparație, studentIDs sunt comparate (altfel, o comparație nevalidă se va face).
Cu toate acestea, funcția mea de inserare nu utilizează funcțiile mele de comparație supraîncărcat. In schimb, se pare a fi compararea celor două obiecte alt mod, rezultând în sortarea invalidă în BST. O parte din funcția mea de inserție se află mai jos - este important de remarcat faptul că atât toInsert și nodePtr-> date ar trebui să fie de tip studentRecord, ca urmare a procesului de templateuri care au loc.
// 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);
}
De asemenea, aici este o parte din clasa defintion BST
// 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.....
Orice idei cu privire la ceea ce ar putea fi cauza asta? Sunt supraîncărcării clasa greșită sau funcția greșită? Orice ajutor este apreciat - mi se pare că am pierdut, deoarece atât de multe lucruri diferite, au loc în același timp.













