Velvet Star Monitor

Standout celebrity highlights with iconic style.

updates

Undefined Reference to

Writer Matthew Barrera

When I compile my code for a linked list, I get a bunch of undefined reference errors. The code is below. I have been compiling with both of these statements:

g++ test.cpp 

as well as

g++ LinearNode.h LinearNode.cpp LinkedList.h LinkedList.cpp test.cpp 

I really do not understand why I am getting these errors because I am really rusty on classes in C++. I could really use some help.

LinearNode.h:

#ifndef LINEARNODE_H
#define LINEARNODE_H
#include<iostream>
using namespace std;
class LinearNode
{ public: //Constructor for the LinearNode class that takes no arguments LinearNode(); //Constructor for the LinearNode class that takes the element as an argument LinearNode(int el); //returns the next node in the set. LinearNode* getNext(); //returns the previous node in the set LinearNode* getPrevious(); //sets the next element in the set void setNext(LinearNode* node); //sets the previous element in the set void setPrevious(LinearNode* node); //sets the element of the node void setElement(int el); //gets the element of the node int getElement(); private: LinearNode* next; LinearNode* previous; int element;
};//ends the LinearNode class
#endif

LinearNode.cpp:

#ifndef LINEARNODE_cpp
#define LINEARNODE_cpp
#include<iostream>
#include"LinearNode.h"
using namespace std;
//Constructor for LinearNode, sets next and element to initialized states
LinearNode::LinearNode()
{ next = NULL; element = 0;
}//ends LinearNode default constructor
//Constructor for LinearNode takes an element as argument.
LinearNode::LinearNode(int el)
{ next = NULL; previous = NULL; element = 0;
}//ends LinearNode constructor
//returns the next element in the structure
LinearNode* LinearNode::getNext()
{ return next;
}//ends getNext function
//returns previous element in structure
LinearNode* LinearNode::getPrevious()
{ return previous;
}//ends getPrevious function
//sets the next variable for the node
void LinearNode::setNext(LinearNode* node)
{ next = node;
}//ends the setNext function
//sets previous for the node
void LinearNode::setPrevious(LinearNode* node)
{ previous = node;
}//ends the setPrevious function
//returns element of the node
int LinearNode::getElement()
{ return element;
}//ends the getelement function
//sets the element of the node
void LinearNode::setElement(int el)
{ element = el;
}//ends the setElement function
#endif

LinkedList.h:

#ifndef LINKEDLIST_H
#define LINKEDLIST_H
#include<iostream>
#include"LinearNode.h"
using namespace std;
class LinkedList
{ public: LinkedList(); void add(int element); int removie (int element); private: int count; LinearNode *contents;
};//ends the class linked list
#endif

LinkedList.cpp:

#ifndef LINKEDLIST_CPP
#define LINKEDLIST_CPP
#include<iostream>
#include"LinearNode.h"
#include"LinkedList.h"
using namespace std;
//linkedlist constructor for an empty linked list
LinkedList::LinkedList()
{ count = 0; contents = NULL;
}//ends the constructor
//adds an element to the front of the linked list
void LinkedList::add(int element)
{ int found = 0, current = 0; while( (found == 0) && (current !=count) ) { if (contents.getElement() == element) found = 1; else { contents = contents.getNext(); current++; }//ends the else statement }//ends the while loop if (found == 0) { LinearNode node = new LinearNode(element); node.setNext(contents); contents.setPrevious(node); count++; }//ends the found == 0 if statment
}//ends the add function
//this function removes one element from the linked list.
int LinearNode::remove(int element)
{ int found = 0; if (count == 0) cout << "The list is empty" << endl; else { if (contents.getElement() == element) { result = contents.getElement(); contents = contents.getNext(); }//ends the contents.getElement() == element else { previous = contents; current = contents.getNext(); for (int index = 0; ( (index < count) && (found == 0) )index++) if (current.getElement() = element) found = 1; else { previous = current; current = current.getNext(); }//ends the else statement if (found == 0) cout << "The element is not in the list" << endl; else { result = current.getElement(); previous.setNext(current.getNext()); }//ends else statement }//ends the else stamtement count--; }//ends the else statement of count == 0 return result;
}//ends the remove function
#endif

test.cpp:

#include<iostream>
#include"LinearNode.h"
#include"LinkedList.h"
using namespace std;
int main()
{ LinearNode node1, node2, node3, move; LinkedList list; node1.setElement(1); node2.setElement(2); node3.setElement(3);
} 
5

6 Answers

  1. Usually headers guards are for header files (i.e., .h ) not for source files ( i.e., .cpp ).
  2. Include the necessary standard headers and namespaces in source files.

LinearNode.h:

#ifndef LINEARNODE_H
#define LINEARNODE_H
class LinearNode
{ // .....
};
#endif

LinearNode.cpp:

#include "LinearNode.h"
#include <iostream>
using namespace std;
// And now the definitions

LinkedList.h:

#ifndef LINKEDLIST_H
#define LINKEDLIST_H
class LinearNode; // Forward Declaration
class LinkedList
{ // ...
};
#endif

LinkedList.cpp

#include "LinearNode.h"
#include "LinkedList.h"
#include <iostream>
using namespace std;
// Definitions

test.cpp is source file is fine. Note that header files are never compiled. Assuming all the files are in a single folder -

g++ LinearNode.cpp LinkedList.cpp test.cpp -o exe.out
1

I was getting this error because my cpp files was not added in the CMakeLists.txt file

g++ test.cpp LinearNode.cpp LinkedList.cpp -o test
1

I had this issue when I forgot to add the new .h/.c file I created to the meson recipe so this is just a friendly reminder.

Another way to get this error is by accidentally writing the definition of something in an anonymous namespace:

foo.h:

namespace foo { void bar();
}

foo.cc:

namespace foo { namespace { // wrong void bar() { cout << "hello"; }; }
}

other.cc file:

#include "foo.h"
void baz() { foo::bar();
}
0

Try to remove the constructor and destructors, it's working for me....

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy