First error is in line 16 where it says undefined reference to 'orderedLinkedList<int>::insert(int const&)
but the function has been declared in the header:
#include "orderedLinkedList.h"
#include "LinkedListType.h"
#include "LinkedListIterator.h"
#include <iostream>
usingnamespace std;
template <class Type>
bool orderedLinkedList<Type>::search(const Type& searchItem) const
{
bool found = false;
nodeType<Type> *current; //pointer to traverse the list
current = this->first; //start the search at the first node
while (current != NULL && !found)
if (current->info >= searchItem)
found = true;
else
current = current->link;
if (found)
found = (current->info == searchItem); //test for equality
return found;
}//end search
template <class Type>
void orderedLinkedList<Type>::insert(const Type& newItem)
{
nodeType<Type> *current; //pointer to traverse the list
nodeType<Type> *trailCurrent; //pointer just before current
nodeType<Type> *newNode; //pointer to create a node
bool found;
newNode = new nodeType<Type>; //create the node
newNode->info = newItem; //store newItem in the node
newNode->link = NULL; //set the link field of the node
//to NULL
if (this->first == NULL) //Case 1
{
this->first = newNode;
this->last = newNode;
this->count++;
}
else
{
current = this->first;
found = false;
while (current != NULL && !found) //search the list
if (current->info >= newItem)
found = true;
else
{
trailCurrent = current;
current = current->link;
}
if (current == this->first) //Case 2
{
newNode->link = this->first;
this->first = newNode;
this->count++;
}
else //Case 3
{
trailCurrent->link = newNode;
newNode->link = current;
if (current == NULL)
this->last = newNode;
this->count++;
}
}//end else
}//end insert
template <class Type>
void orderedLinkedList<Type>::insertFirst(const Type& newItem)
{
insert(newItem);
}//end insertFirst
template <class Type>
void orderedLinkedList<Type>::insertLast(const Type& newItem)
{
insert(newItem);
}//end insertLast
template <class Type>
void orderedLinkedList<Type>::deleteNode(const Type& deleteItem)
{
nodeType<Type> *current; //pointer to traverse the list
nodeType<Type> *trailCurrent; //pointer just before current
bool found;
if (this->first == NULL) //Case 1
cout << "Cannot delete from an empty list." << endl;
else
{
current = this->first;
found = false;
while (current != NULL && !found) //search the list
if (current->info >= deleteItem)
found = true;
else
{
trailCurrent = current;
current = current->link;
}
if (current == NULL) //Case 4
cout << "The item to be deleted is not in the list."
<< endl;
elseif (current->info == deleteItem) //the item to be
//deleted is in the list
{
if (this->first == current) //Case 2
{
this->first = this->first->link;
if (this->first == NULL)
this->last = NULL;
delete current;
}
else //Case 3
{
trailCurrent->link = current->link;
if (current == this->last)
this->last = trailCurrent;
delete current;
}
this->count--;
}
else //Case 4
cout << "The item to be deleted is not in the "
<< "list." << endl;
}
}//end deleteNode
Templated code need to be fully defined at the point where it is used so you are more or less forced to put the functions in the header. This will not give you multiple definition errors because the rules for templates are different compared to regular functions.
That was not what I intended with those words. It should work if you put them in the header. Make sure you put it inside the include guard (before the #endif).
@redman008, yeah, Peter's saying no orderedLinkedList.cpp at all (everything there moved to orderedLinkedList.h). Also main.cpp should probably only have the single include, #include "orderedLinkedList.h" -- main doesn't care about the linkedlist parents since it's not using them.
Yes peter and icy. This is how I initially understood it, but try as I may, it didnt work. I will now see what i did wrong because as you guys say it should work in header with only the single #include "orderedLinkedList.h" in main