Linked List Queue Implementation help
I have been studying C++ for a year now, and I've started a small test project: A linked list container library. I'm using Dev-C++, and when I try to compile the listing, it gives me the errors:
Quote:
Compiler: Default compiler
Executing g++.exe...
g++.exe "C:\Documents and Settings\Stephen\Desktop\Nathan\Programming Languages\C++\Kenogu's Container Library\QueueTest.cpp" -o "C:\Documents and Settings\Stephen\Desktop\Nathan\Programming Languages\C++\Kenogu's Container Library\QueueTest.exe" -fexceptions -pg -g3 -I"C:\Program Files\Dev C++\Dev-Cpp\include\c++" -I"C:\Program Files\Dev C++\Dev-Cpp\include\c++\backward" -I"C:\Program Files\Dev C++\Dev-Cpp\include" -I"C:\Program Files\Dev C++\Dev-Cpp\include\c++\mingw32" -I"C:\Program Files\Dev C++\Dev-Cpp\include\c++\random" -L"C:\Program Files\Dev C++\Dev-Cpp\lib" -L"C:\Program Files\Dev C++\Dev-Cpp\Allegro\Lib"
In file included from C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:12,
from C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/QueueTest.cpp:2:
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.hpp:26: `
LLQueue' is not a template type
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.hpp:34: data
member `head' cannot be a member template
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.hpp:35: data
member `tail' cannot be a member template
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.hpp:36: data
member `size' cannot be a member template
In file included from C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/QueueTest.cpp:2:
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:19: non-template
type `LLQueue' used as a template
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:20: ISO
C++ forbids declaration of `LLQueue' with no type
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp: In
function `int LLQueue()':
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:20: only
constructors take base initializers
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp: At
global scope:
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:23: syntax
error before `::' token
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:23: `
t' was not declared in this scope
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:23: `
InData' was not declared in this scope
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:23: ISO
C++ forbids declaration of `push' with no type
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:23: syntax
error before `{' token
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:27: ISO
C++ forbids declaration of `tail' with no type
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:27: `
node' was not declared in this scope
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:28: parse
error before `if'
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:30: syntax
error before `++' token
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:34: syntax
error before `::' token
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:34: ISO
C++ forbids declaration of `pop' with no type
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp: In
function `int pop()':
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:35: `
size' undeclared (first use this function)
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:35: (Each
undeclared identifier is reported only once for each function it appears
in.)
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:37: `
t' undeclared (first use this function)
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:37: parse
error before `=' token
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:38: `
LLQueueNode' undeclared (first use this function)
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:39: `
head' undeclared (first use this function)
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:40: `
newHead' undeclared (first use this function)
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/Queue.cpp:42: `
data' undeclared (first use this function)
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/QueueTest.cpp: In
function `int main()':
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/QueueTest.cpp:6: parse
error before `(' token
C:/Documents and Settings/Stephen/Desktop/Nathan/Programming Languages/C++/Kenogu's Container Library/QueueTest.cpp:11: `
q' undeclared (first use this function)
Execution terminated
Here is the code used:
Code:
/*
-=Linked List queue=-
-=COPYRIGHT KENOGU LABZ 2005=-
Classes used:
LLQueue
LLQueueNode
*/
#ifndef QUEUE_HPP
#define QUEUE_HPP
class LLQueue;
template <class t>
class LLQueueNode {
public:
LLQueueNode(t * InData, LLQueueNode * InNext);
~LLQueueNode(){delete data; delete next;}
friend class LLQueue;
private:
t * data;
LLQueueNode<t> * next;
};
template <class t>
class LLQueue {
public:
LLQueue();
~LLQueue(){delete head; delete tail;}
void push(t * InData);
t * pop();
int getSize() {return size;}
private:
LLQueueNode<t> * head;
LLQueueNode<t> * tail;
int size;
};
class Empty{};
#endif
-------------------------------------------------------------------
/*
-=Linked List queue=-
-=COPYRIGHT KENOGU LABZ 2005=-
Classes used:
Queue
QueueNode
*/
#ifndef QUEUE_CPP
#define QUEUE_CPP
#include "Queue.hpp"
template <class t>
LLQueueNode<t>::LLQueueNode(t * InData, LLQueueNode * InNext)
:data(InData), next(InNext){}
template <class t>
LLQueue<t>::LLQueue()
:head(0), tail(0), size(0){}
template <class t>
LLQueue<t>::push(t * InData) {
LLQueueNode* node = new LLQueueNode(InData, 0);
if(size)
tail->next = node;
tail = node;
if(!size)
head = node;
size++;
}
template <class t>
t LLQueue<t>::pop() {
if(!size)
throw Empty();
t data = head->data;
LLQueueNode newHead = head->next;
delete head;
head = newHead;
size--;
return data;
}
-----------------------------------------------------------------
#include <iostream>
#include "Queue.cpp"
using namespace std;
int main() {
LLQueue<int> q();
unsigned short choice;
do {
cout << "Enter a number to add to the queue (0 to exit): ";
cin >> choice;
q.push(new int(choice));
} while(choice!=0);
try {
cout << "Queue Size: " << q.getSize() << endl;
cout << "Next value: " << q.pop() << endl;
}
catch(Empty) {}
cout << "End of Queue. (Press CTRL-Z)";
char leave;
do
cin >> leave;
while(leave != EOF);
return 0;
}
Could anyone tell me why this isn't compiling? Design criticisms are welcome, too.
-=Kenogu Labz=-