0
#ifndef DNODE_H
#define DNODE_H

class DNode{
private:
  int val;  // data
  DNode * prev;
  DNode * next;

  friend class DLinkedList;
};

#endif
#include"DNode.h"

#ifndef DLINKEDLIST_H
#define DLINKEDLIST_H

class DLinkedList{
private:
  DNode * head;           //pointer to the first node
  DNode * trailer;       // pointer to last node

public:
  DLinkedList();



~DLinkedList();                    // Destructor
  bool empty() const;               // is list empty?
  const int& front() const;        // get front element
  const int& back() const;         // get back element
  void addFront(const int & e);   // add to front of list
  void addBack(const int & e);   // add to back of list
  void removeFront();           // remove front item from list
  void removeBack();           // remove back item from list
  void displayList();

};
#endif
#include"DLinkedList.h"
          
DLinkedList::DLinkedList(){
  head = new DNode;     //creating the first element in the Linked List
  trailer = new DNode; //creating the last element in the Linked List
  // Both head and trailer have each other's address
  head->next = trailer;
  trailer->next = head;
}
DLinkedList::~DLinkedList(){
  delete head;
  delete trailer;
  }    
bool DLinkedList::empty() const{

  return head->next == trailer;
}               // is list empty?
  const int& DLinkedList::front() const{
    return head->next->val;  
  }       // get front element
  const int& DLinkedList::back() const{
    return trailer->prev->val;
}         // get back element

void DLinkedList::addFront(const int & e){
  DNode *newNode = new DNode(); // creating a new node pointer object
  newNode->val = e; // // Assigning a value to the newly created node that is passed as parameter in our addFront function
  newNode->next = head; // Our new node points to head-  going to be the first element(head) of the Linked List
  head = newNode; //Now the head is the same as the new node 
}   // add to front of list
void DLinkedList::addBack(const int & e){
  DNode *newNode = new DNode(); // creating a new node pointer object
  newNode->val = e;
  newNode->next = NULL;
  if (head == NULL){
    head = newNode;
    return;
  }
  
  DNode * lastNode = head;
  while(lastNode->next!=NULL){
    lastNode=lastNode->next;
  }
  lastNode->next = newNode;
}  // add to back of list
void DLinkedList::removeFront(){
/* if(head != NULL){
    std::cout<< "The List if Empty";
  }*/
  DNode * temp = head;
  head = head->next;

  delete temp;
}          // remove front item from list
void DLinkedList::removeBack(){
  if(head != NULL){
    if(head->next==NULL){
      head=NULL;
    }
    else{
      DNode *temp = head;
      while(temp->next->next != NULL){
        temp = temp->next;
      DNode *last = temp->next;
        temp->next = NULL;
        delete last;
      }
    }
  }   
}
void DLinkedList::DLinkedList::displayList(){
    DNode *current = head;
    while(current != NULL){

        std::cout<<current->val<<" --> ";

        current = current->next;

    }
    std::cout<<"NULL"<<std::endl;
}
#include <iostream>
#include<string>
#include"DLinkedList.cpp"


int main() {
  DLinkedList list;

  list.addFront(10);
  list.addFront(20);
  list.addFront(30);

  list.addBack(40);
  list.addBack(50);

  list.displayList();
}       

Error:

      /nix/store/v8imx1nvyz0hgvx9cbcmh6gp4ngw3ffj-binutils-2.35.1/bin/ld: /tmp/DLinkedList-41fe40.o: in function `DLinkedList::removeBack()':
/home/runner/DLisnked-List/./DLinkedList.cpp:55: multiple definition of `DLinkedList::removeBack()'; /tmp/main-7d3742.o:/home/runner/DLisnked-List/./DLinkedList.cpp:55: first defined here
/nix/store/v8imx1nvyz0hgvx9cbcmh6gp4ngw3ffj-binutils-2.35.1/bin/ld: /tmp/DLinkedList-41fe40.o: in function `DLinkedList::displayList()':
/home/runner/DLisnked-List/./DLinkedList.cpp:71: multiple definition of `DLinkedList::displayList()'; /tmp/main-7d3742.o:/home/runner/DLisnked-List/./DLinkedList.cpp:71: first defined here
/nix/store/v8imx1nvyz0hgvx9cbcmh6gp4ngw3ffj-binutils-2.35.1/bin/ld: /tmp/DLinkedList-41fe40.o: in function `DLinkedList::removeFront()':
/home/runner/DLisnked-List/./DLinkedList.cpp:50: multiple definition of `DLinkedList::removeFront()'; /tmp/main-7d3742.o:/home/runner/DLisnked-List/./DLinkedList.cpp:50: first defined here
/nix/store/v8imx1nvyz0hgvx9cbcmh6gp4ngw3ffj-binutils-2.35.1/bin/ld: /tmp/DLinkedList-41fe40.o: in function `DLinkedList::addBack(int const&)':
/home/runner/DLisnked-List/./DLinkedList.cpp:31: multiple definition of `DLinkedList::addBack(int const&)'; /tmp/main-7d3742.o:/home/runner/DLisnked-List/./DLinkedList.cpp:31: first defined here
/nix/store/v8imx1nvyz0hgvx9cbcmh6gp4ngw3ffj-binutils-2.35.1/bin/ld: /tmp/DLinkedList-41fe40.o: in function `DLinkedList::addFront(int const&)':
/home/runner/DLisnked-List/./DLinkedList.cpp:25: multiple definition of `DLinkedList::addFront(int const&)'; /tmp/main-7d3742.o:/home/runner/DLisnked-List/./DLinkedList.cpp:25: first defined here
/nix/store/v8imx1nvyz0hgvx9cbcmh6gp4ngw3ffj-binutils-2.35.1/bin/ld: /tmp/DLinkedList-41fe40.o: in function `DLinkedList':
/home/runner/DLisnked-List/./DLinkedList.cpp:4: multiple definition of `DLinkedList::DLinkedList()'; /tmp/main-7d3742.o:/home/runner/DLisnked-List/./DLinkedList.cpp:4: first defined here
/nix/store/v8imx1nvyz0hgvx9cbcmh6gp4ngw3ffj-binutils-2.35.1/bin/ld: /tmp/DLinkedList-41fe40.o: in function `DLinkedList':
/home/runner/DLisnked-List/./DLinkedList.cpp:4: multiple definition of `DLinkedList::DLinkedList()'; /tmp/main-7d3742.o:/home/runner/DLisnked-List/./DLinkedList.cpp:4: first defined here
/nix/store/v8imx1nvyz0hgvx9cbcmh6gp4ngw3ffj-binutils-2.35.1/bin/ld: /tmp/DLinkedList-41fe40.o: in function `~DLinkedList':
/home/runner/DLisnked-List/./DLinkedList.cpp:11: multiple definition of `DLinkedList::~DLinkedList()'; /tmp/main-7d3742.o:/home/runner/DLisnked-List/./DLinkedList.cpp:11: first defined here
/nix/store/v8imx1nvyz0hgvx9cbcmh6gp4ngw3ffj-binutils-2.35.1/bin/ld: /tmp/DLinkedList-41fe40.o: in function `~DLinkedList':
/home/runner/DLisnked-List/./DLinkedList.cpp:11: multiple definition of `DLinkedList::~DLinkedList()'; /tmp/main-7d3742.o:/home/runner/DLisnked-List/./DLinkedList.cpp:11: first defined here
/nix/store/v8imx1nvyz0hgvx9cbcmh6gp4ngw3ffj-binutils-2.35.1/bin/ld: /tmp/DLinkedList-41fe40.o: in function `DLinkedList::back() const':
/home/runner/DLisnked-List/./DLinkedList.cpp:23: multiple definition of `DLinkedList::back() const'; /tmp/main-7d3742.o:/home/runner/DLisnked-List/./DLinkedList.cpp:23: first defined here
/nix/store/v8imx1nvyz0hgvx9cbcmh6gp4ngw3ffj-binutils-2.35.1/bin/ld: /tmp/DLinkedList-41fe40.o: in function `DLinkedList::empty() const':
/home/runner/DLisnked-List/./DLinkedList.cpp:17: multiple definition of `DLinkedList::empty() const'; /tmp/main-7d3742.o:/home/runner/DLisnked-List/./DLinkedList.cpp:17: first defined here
/nix/store/v8imx1nvyz0hgvx9cbcmh6gp4ngw3ffj-binutils-2.35.1/bin/ld: /tmp/DLinkedList-41fe40.o: in function `DLinkedList::front() const':
/home/runner/DLisnked-List/./DLinkedList.cpp:20: multiple definition of `DLinkedList::front() const'; /tmp/main-7d3742.o:/home/runner/DLisnked-List/./DLinkedList.cpp:20: first defined here
clang-12: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Makefile:9: main] Error 1
exit status 2
 
Jason
  • 36,170
  • 5
  • 26
  • 60
  • Welcome to Stack Overflow. Please read [ask] and https://meta.stackoverflow.com/questions/261592. – Karl Knechtel Sep 27 '22 at 02:49
  • The problem is that you're including a source file named `DLinkedList.cpp` inside your `main.cpp` when you wrote `#include "DLinkedList.cpp"`. **Never include source files**. See dupe: [How to define static method in a cpp file. (C++)](https://stackoverflow.com/questions/72329682/how-to-define-static-method-in-a-cpp-file-c/72329806#72329806) – Jason Sep 27 '22 at 03:01

1 Answers1

0

In general, you shouldn't do:

#include"DLinkedList.cpp"

You include header filese like DLinkedList.h, not DLinkedList.cpp.

Bill Lynch
  • 80,138
  • 16
  • 128
  • 173