I am getting a write access violation exception when I try to run my code.
int main() { OrderedList<int> l; l.insert(3); l.insert(6); l.insert(56); l.insert(1); return 0; } Here is OrderedList.h including all the functions of OrderedList class:
#pragma once #include <iostream> using namespace std; template <class T, class LessComp = less<T>, class Equal = equal_to<T> > class OrderedList { private: struct Node { T value; Node* next; Node(const T& value, Node* next = nullptr) : value(value), next(next) {} }; Node* first; int numElements; public: OrderedList(); ~OrderedList(); bool isEmpty(); void insert(const T&); void remove(const T&); int size() const; bool find(const T&) const; void listItems(ostream&); }; template <class T, class LessComp, class Equal > OrderedList<T, LessComp, Equal>::OrderedList() { this->first = nullptr; this->numElements = 0; } template <class T, class LessComp, class Equal > OrderedList<T, LessComp, Equal>::~OrderedList() { Node* current = this->first; Node* next; while (current != nullptr) { next = current->next; delete current; current = next; } this->numElements = 0; } template <class T, class LessComp, class Equal > bool OrderedList<T, LessComp, Equal>::isEmpty() { return this->numElements > 0; } template <class T, class LessComp, class Equal > void OrderedList<T, LessComp, Equal>::insert(const T& element) { Node* temp = this->first; Node* node=nullptr; LessComp lesscomp; if (this->first == nullptr) { this->first->value=element; this->first->next = nullptr; } else { if (lesscomp(element, this->first->value)) { node->value = element; node->next = this->first; this->first = node; } else { while (temp->next != nullptr && !(lesscomp(element, temp->value) && element >= temp->value)) { temp = temp->next; } if (temp->next == nullptr) { temp = temp->next; temp->value = element; temp->next = nullptr; } else { node->value = element; node->next = temp->next; temp->next = node; } } } ++this->numElements; } template <class T, class LessComp, class Equal > void OrderedList<T, LessComp, Equal>::remove(const T& element) { Node* temp = this->first; Node* prev; if (temp == nullptr && temp->value == element) { this->first = temp->next; delete temp; return; } while (temp != nullptr && temp->value != element) { prev = temp; temp = temp->next; } if (temp == nullptr) { return; } prev->next = temp->next; delete temp; --this->numElements; } template <class T, class LessComp, class Equal > int OrderedList<T, LessComp, Equal>::size() const { return this->numElements; } template <class T, class LessComp, class Equal > bool OrderedList<T, LessComp, Equal>::find(const T& element) const { Node* current = this->first; while (current != nullptr) { if (current->value == element) { return true; } current = current->next; } return false; } template <class T, class LessComp, class Equal > void OrderedList<T, LessComp, Equal>::listItems(ostream& os) { Node* temp = this->first; while (temp != nullptr) { os << temp->value << endl; temp = temp->next; } } I don't know what to try to solve this problem.
I want to create a sorted linked list using templates.
Any ideas or suggestions?
Thanks in advance.
