-1

This is my code for an implementation of a doubly linked list that inherits previous code from a single linked list, I am currently having trouble with a linker error and surfed the web for the past hour looking for an answer to my problem and found nothing so far to help me. This is my last resor can anyone help?

Specifically the error i get when i try to use g++ to link my .o files is:

DoublyList.o:DoublyList.cpp:(.text+0xf): undefined reference to 
`LinkedList::LinkedList()'
collect2.exe: error: ld returned 1 exit status

I have found very similar questions asked but none of the answers helped me or at least I do not know how to implement them in my code specifically, any help will be apprectiated.

My LinkedList class

#ifndef LINKEDLIST_H
#define LINKEDLIST_H

using namespace std;


struct node
    {
        float value;
        node *next;

    };

class LinkedList
{


private:
    node *first;
public:
    LinkedList();
    virtual void insert(float val);
    virtual void del(float val);
    virtual void read();
    virtual int search(float val);


};

#endif

My LinkedList class definition

#include <iostream>
#include "LinkedList.h"

using namespace std;


LinkedList::LinkedList()
{
    this->first = NULL;
}


void LinkedList::insert(float val)
{

    if(this->first==NULL or this->first->value >= val)
    {
        node* a_node = new node();
        a_node->value = val;
        this->first = a_node;
        return;
    }
    node* n = new node();
    n = this->first;
    node* new_node = new node();
    new_node->value = val;
    while(n->next != NULL and n->next->value < new_node->value)
    {
        n = n->next;
    }
    new_node->next = n->next;
    n->next = new_node;

}


void LinkedList::del(float val)
{
    node* n = this->first;
    node* prev = new node();
    prev = n;//in case if it is the first value
    int i = this->search(val);
    if(this->first->value == val)
    {
        this->first = this->first->next;
        return;
    }

    if(i != -1)
    {
        for(int j = 0; j < i; j++)
        {
            prev = n;
            n = n->next;
        }
    }
    //one last check
    if(n->value == val)
    {
        prev->next = n->next;
    }

}


void LinkedList::read()
{
    node* n = this->first;
    int i = 1;
    while(n != NULL)
    {
        cout << i << ". " << n->value << endl;
        n = n->next;
        i++;
    }
}


int LinkedList::search(float val)
{
    int i = 0;
    node* n = this->first;
    while(n != NULL)
    {
        if(n->value == val)
            return i;
        else
        {
            n = n->next;
            i++;    
        }
    }
    return -1;
}

My doublylist class

#ifndef DOUBLYLIST_H
#define DOUBLYLIST_H

#include "LinkedList.h"

class DoublyList: public LinkedList
{
public:
    struct node
    {
        float value;
        node * next;
        node * prev;
    };
    node * first;
    DoublyList();
    void insert(float val);
    void del(float val);
    void read();
    int search(float val);

};


#endif

My Doubly List definiton

 #include <cstddef>
    #include "DoublyList.h"
    #include "LinkedList.h"

    using namespace std;

    //constructor
    DoublyList::DoublyList()
    {
        first = NULL;
    }
    //Insert a node into the correct position in the doubly linked list
    void DoublyList::insert(float val)
    {
    //if linked list is empty or val <= the first node
    if(this->first == NULL or this->first->value >= val)
    {
        node * a_node = new node();
        a_node->value = val;//set node's value
        //begin replacing and assigning pointers
        a_node->next = this->first;
        a_node->prev = NULL;
        this->first = a_node;

        return;
    }
    node * n = new node();
    n = this->first;
    node * new_node = new node();
    new_node->value = val;
    node * prev_node = new node();
    while(n->next != NULL and n->next->value < new_node->value)
    {
        prev_node = n;
        n = n->next;
    }
    prev_node->next = new_node;
    new_node->next = n->next;
    new_node->prev = prev_node;
    n->next = new_node;
    }

    void DoublyList::del(float val)
    {
    node * n = this->first;
    int i = this->search(val);
    //if first node
    if(this->first->value == val)
    {
        this->first = this->first->next;
        this->first->prev = NULL;
        return;
    }
    //if value found
    if(i != -1)
    {
        for(int j = 0; j < i; j++)
        {
            n = n->next;
        }
        //if a middle node
        if(n->value == val and n->next != NULL)
        {
            n->prev->next = n->next;
            return;
        }
        //if last node
        if(n->prev != NULL)
        {
            n->prev->next = n->next;
        }
    }
    return;//value not found so return
    }

void DoublyList::read() {   }
int DoublyList::search(float val) { }

Edit: Forgot to mention this error specifically happens aruond line 8 of DoublyList.cpp, this was from previous trials to link the .o files. The command I used to call the linker is

g++ -g main2.cpp DoublyList.o

Where main2.cpp is the code that contains my main function to test the code.

1 Answers1

0

Thanks to xskxzr the solution was to also link LinkedList.o along with all the rest of the .o files. If anyone ever has the same problem this is the answer.