#define BOBCATPOD_H
class bobcatPod
{
private:
//Declare a structure for the list
struct SongNode
{
Song s; //value in this node
SongNode *next; //To point to the next node
};
SongNode *head;
public:
//Constructor
bobcatPod()
{head = NULL;}
//Destructor
~bobcatPod();
//Linked list operations
void appendNode (Song s);
int addSong (Song s);
int removeSong (Song s);
void showSongList ();
int getTotalMemory();
int getRemainingMemory();
};
#endif
#include "song.h"
#include "bobcatPod.h"
void bobcatPod::appendNode (Song num)
{
SongNode *newNode; //to point to a new node
SongNode *nodePtr; //to move through the list
//allocate a new node and stor num there.
newNode = new SongNode;
newNode->s = num;
newNode->next = NULL;
//if there are no nodes in the list
//make newNode the first node
if (!head)
head = newNode;
else //otherwise, insert newNOde at end
{
//initialize nodePtr to head of list
nodePtr = head;
//find the last node in the list
while (nodePtr->next)
nodePtr = nodePtr->next;
//insert newNode as the last node.
nodePtr->next = newNode;
}
}
int bobcatPod::addSong(Song s)
{
Song *newSong; //a new node
Song *nodePrt; //to traverse the list
Song *previousSong = NULL; //The previous node
// Allocate a new node and stor num there.
newSong = new Song;
newSong->next = NULL;
//If ther are no nodes in the list
//make newSong the first node
if (!head)
{
head = newSong;
newSong -> next = NULL;
}
else //Otherwise, insert newSong
{
//Position nodePtr at the head of list.
nodePtr = head;
//Initialize prefiousSong to NULL.
previousSong = NULL
//skip all nodes whose value is less than num.
while (nodePtr != NULL && nodePtr ->value <num)
{
previousSong = nodePtr;
nodePtr = nodePtr->next;
}
//If the new Song is to be the 1s in the list,
//insert it before all other nodes.
if (previousSong ==NULL)
{
head = newSong;
newSong ->next = nodePtr;
}
else //Otherwise insert after the previous node.
{
previousSong->next = newSong;
newSong-> next = nodePrt;
}
}
}
The driver and song files work, but there is something wrong with bobpod files.
class Song
{
public:
Song::Song (); //ERROR - illegal to have :: here
Song::Song(string , string , int ); // constructor //ERROR illegal ::
2. bobcatpod.h
Header gaurd is incorrect - but i reckon you cut off the first line when copying and pasting the code.
Also bobcatpod.h needs to #include song.h
3. In the main function
1 2 3 4 5 6 7 8 9
//The following 3 lines are errors because if you look at
//bobcatpd.h - The name of the actual class is bobcatPodNOT BobCatPod
//And also you do not have a constructor defined for bobcatPod class that takes an integer parameter.
BobCatPod p(256);
BobCatPod q(512);
BobCatPod r(25);
1 2 3 4
//You have not written a << operator for the bobcatPod class
//(You have done it for the Song class but not for bobcatPod)
cout << "pod p" << endl << p << endl; //ERROR
Thanks so much. But I am getting an error here newSong->next = NULL; it says class song has no member named next. I don't know what to do with that that is what is in my book.
It's just what the error says. 'song' has no member 'next'. Only 'bobcatPod' has a 'next'. Check with the book the type of newSong. If the book says it's song, then there's an error in the book.
//BobCatPod.h
//Specification files for the SongList class
#ifndef BOBCATPOD_H
#define BOBCATPOD_H
#include "song.h"
class BobCatPod
{
private:
//Declare a structure for the list
struct SongNode
{
Song s; //value in this node
SongNode *next; //To point to the next node
};
SongNode *head;
public:
//Constructor
BobCatPod()
{head = NULL;}
//Destructor
~BobCatPod();
if( !pNumber )
{
//Memory is BAD
}
//Linked list operations
void appendNode (Song s);
int addSong (Song s);
int removeSong (Song s);
void showSongList ();
int getTotalMemory();
int getRemainingMemory();
friend ostream& operator<<(ostream & os, Song & s);
};
#endif
//BobCatPod.cpp
#include "song.h"
void BobCatPod::appendNode (Song num)
{
SongNode *newNode; //to point to a new node
SongNode *nodePtr; //to move through the list
//allocate a new node and stor num there.
newNode = new SongNode;
newNode->s = num;
newNode->next = NULL;
//if there are no nodes in the list
//make newNode the first node
if (!head)
head = newNode;
else //otherwise, insert newNOde at end
{
//initialize nodePtr to head of list
nodePtr = head;
//find the last node in the list
while (nodePtr->next)
nodePtr = nodePtr->next;
//insert newNode as the last node.
nodePtr->next = newNode;
}
}
int BobCatPod::addSong(Song s)
{
Song *newSong; //a new node
Song *nodePrt; //to traverse the list
Song *previousSong = NULL; //The previous node
// Allocate a new node and stor num there.
newSong = new Song;
newSong->next = NULL;
//If ther are no nodes in the list
//make newSong the first node
if (!head)
{
head = newSong;
newSong -> next = NULL;
}
else //Otherwise, insert newSong
{
//Position nodePtr at the head of list.
nodePtr = head;
//Initialize prefiousSong to NULL.
previousSong = NULL
//skip all nodes whose value is less than num.
while (nodePtr != NULL && nodePtr ->value <num)
{
previousSong = nodePtr;
nodePtr = nodePtr->next;
}
//If the new Song is to be the 1s in the list,
//insert it before all other nodes.
if (previousSong ==NULL)
{
head = newSong;
newSong ->next = nodePtr;
}
else //Otherwise insert after the previous node.
{
previousSong->next = newSong;
newSong-> next = nodePrt;
}
}
}
Just reading through that int BobCatPod::addSong(Song s) function, you can see that it is wrong.
For a start, look at the void BobCatPod::appendNode (Song num) function, the way that it starts off with:
1 2 3
SongNode *newNode; //to point to a new node
SongNode *nodePtr; //to move through the list
//allocate a new node and stor num there.
Now look again at the int BobCatPod::addSong(Song s) function and you will see what I mean.
Also halfway through the int BobCatPod::addSong(Song s) function, we have some variables value and num
(in the while (nodePtr != NULL && nodePtr ->value <num) loop) - where did these variables suddenly appear from??)
Also for the BobCatPod class, you have added the function friend ostream& operator<<(ostream & os, Song & s);.
That isn't going to work if you want to << a BobCatPod object to an ostream (as a mater of fact it will give you a multiple definition error);