//This is my code. I don't understand why it is not compiling. What are the errors and how would the makefile for this program look?
My input file looks like this:
BTS, DYNAMITE, 3.43, 41000000
NF, CLOUDS, 1.14, 869000
HARRY, FALLING, 3.27, 30000000
RACHEL, FIGHT SONG, 3.23, 166000
RUTH, LOST BOY, 4.33, 65000
JAMES, SAY YOU WONT LET GO, 3.27 213000
HARRY, SIGN OF THE TIMES, 5.41, 63000000
IDENA, LET IT GO, 3.21, 21000000
BTS, BLACK SWAN, 3.43, 23000000
PASSENGER, LET HER GO, 4.20, 97000
KATIE, DAISIES, 2.53, 12000
BEBE, SACRIFICES, 2.40, 300000
ANDY, DONT GIVE UP ON ME, 3.16, 5600000
JUSTIN, BIGGER THAN, 3.28, 21000
SAM, IM READY, 3.20, 30500
ALEC, OH MY GOD, 3.07, 1000000
ANDY, GOOD EXAMPLE, 2.29, 15000
GREYSON, GOOD AS GOLD, 3.25, 78000
BRYNN, TELL ME IM PRETTY, 3.08, 29000
GRYFFIN, CRY, 3.38, 3000000
KHALID, FREE SPIRIT, 3.02, 55000
KYGO, LIKE IT IS, 3.03, 890000
CHAINSMOKERS, THIS FEELING, 3.17, 760000
KASKADE, WITH YOU, 3.00, 2000
LAUV, LIKE ME BETTER, 3.17, 5000000
AVA, SALT, 3.00, 56900
LEWIS, BEFORE YOU GO, 3.50, 89000
LAUV, NEVER NOT, 4.02, 76000
JEREMY, ALWAYS ILL CARE, 2.40, 68000
JAMES, IMPOSSIBLE, 4.07, 49000
GMILLER, NO TEARS LEFT TO CRY, 3.10, 770000
main.cpp
#include "songs.h"
using namespace std;
int main() {
cout << "1";
ifstream inFile;
SongList list;
char medium[128];
char *artist,*songName;
double length;
int likes;
inFile.open("songs.txt");
if (inFile.fail()){
cout << "File failed to open, please fix and run again!" << endl;
return -1;
}
while (!inFile.eof())
{
inFile.getline(medium, 128, ',');
artist = new char[sizeof medium];
inFile.getline(medium, 128, ',');
songName = new char[sizeof medium];
inFile >> length;
inFile.ignore(',');
inFile >> likes;
inFile.ignore('\n');
list.add(artist, songName, length, likes);
}
cout << "Welcome to the songlist program! \nPlease enter the function that you would like to use! \n" <<
"Press (A or a) to add a song!\n" <<
"Press (E or e) to edit the likes of a song!\n" <<
"Press (D or d) to display all songs!\n" <<
"Press (T or t) to display songs by artist!\n" <<
"Press (R or r) to remove all songs with less than x many likes!\n";
return 0;
}
___________________________________________________________________________________________________________________________________________________________
songs.h
#pragma once
#include <iostream>
#include <fstream>
#include <cstring>
struct node{
char *name;
char *title;
double length;
int likes;
node* next;
};
class SongList
{
public:
SongList();
~SongList();
bool add(char*&, char*&, double&, int&);
bool addRecursively(node* curr, node* data);
bool editLikes(char*&, char*&, int&);
const bool displayAll();
const bool displayArtist(node* curr, const char*);
bool removeByLikes(int&);
bool deleteRecursively(node*);
const bool printRecursively(node*);
private:
node* head;
node* temp;
node* tail;
};
__________________________________________________________________________________________________________________________________
songs.cpp
#include "songs.h"
SongList::SongList(): head(nullptr), tail(nullptr){}
SongList::~SongList(){
}
bool SongList::add(char *&dataName, char *&dataTitle, double& dataLength, int& dataLikes){
node* newNode= new node;
newNode->name = dataName;
newNode->title = dataTitle;
newNode-> length = dataLength;
newNode->likes = dataLikes;
if (head == nullptr){
head = newNode;
tail = newNode;
return true;
}
return addRecursively(head, newNode);
}
bool SongList::addRecursively(node* curr, node* data){
if (data->likes >= head->likes){
data->next = head;
head = data;
return true;
}
else if (data->likes >= curr->likes){
data->next = curr;
temp->next = data;
return true;
}
else if(curr == tail){
tail->next = curr;
curr = tail;
return true;
}
else {
temp = curr;
return addRecursively(curr->next, data);
}
}
const bool SongList::printRecursively( node *curr){
std::cout << "Song Name is" << curr->name << std::endl;
std::cout << "Song title is" << curr->title << std::endl;
std::cout << "Song length is" << curr->length << std::endl;
std::cout << "Song Likes # is" << curr->likes << std::endl;
if (curr == tail )
return true;
return printRecursively(curr->next);
}
const bool SongList::displayAll(){
if (head == nullptr){
std::cout<< "List is empty/n";
return false;
}
return printRecursively(head);
}
const bool SongList::displayArtist(node* curr, const char *artist) {
if (curr->name == artist){
std::cout << "Song Name is" << curr->name << std::endl;
std::cout << "Song title is" << curr->title << std::endl;
std::cout << "Song length is" << curr->length << std::endl;
std::cout << "Song Likes # is" << curr->likes << std::endl;
}
if (curr == tail){
return true;
}
return displayArtist(curr->next, artist);
}
bool SongList::deleteRecursively(node* curr){
if (head == nullptr)
return false;
temp = curr;
delete curr;
return deleteRecursively(temp->next);
}
bool SongList::removeByLikes(int &dataLikes){
node* travPtr = head;
while (travPtr->next->likes > dataLikes){
travPtr = travPtr->next;
}
travPtr = tail;
return deleteRecursively(travPtr->next);
}
What I have tried:
I have tried debugging and checking my code over and over again but I haven't found out how to fix the error or errors.