views:

196

answers:

3

I keep getting this error message every time I try to compile, and I cannot find out what the problem is. any help would be greatly appreciated:

C:\DOCUME~1\Patrick\LOCALS~1\Temp/ccL92mj9.o:main.cpp:(.txt+0x184): undefined reference to 'List::List()'
C:\DOCUME~1\Patrick\LOCALS~1\Temp/ccL92mj9.o:main.cpp:(.txt+0x184): undefined reference to 'List::add(int)'
collect2:  ld returned 1 exit status

code:

//List.h

#ifndef LIST_H
#define LIST_H

#include <exception>

//brief Definition of linked list class

class List
{
    public:

    /**
    \brief Exception for operating on empty list
    */  


    class Empty : public std::exception
 {
  public:
  virtual const char* what() const throw();
 };

    /**
    \brief Exception for invalid operations other than operating on an empty list
    */

    class InvalidOperation : public std::exception
 {
  public:
  virtual const char* what() const throw();
 };

    /**
    \brief Node within List
    */


    class Node
 {
  public: 
  /** data element stored in this node */
  int element;

  /** next node in list */
  Node* next;

  /** previous node in list */
  Node* previous;

  Node (int element);
  ~Node();

  void print() const;
  void printDebug() const;
 };


    List();
    ~List();

    void add(int element);
    void remove(int element);
    int first()const;
    int last()const;
    int removeFirst();
    int removeLast();
    bool isEmpty()const;
    int size()const;
    void printForward() const;    
    void printReverse() const;
    void printDebug() const;

    /**
    enables extra output for debugging purposes
    */
    static bool traceOn;

    private:
    /** head of list */
    Node* head;
    /** tail of list */
    Node* tail;
    /** count of number of nodes */
    int count;
};
#endif


//List.cpp                   I only included the parts of List.cpp that might be the issue
#include "List.h"
#include <iostream>
#include <iomanip>

using namespace std;


List::List()
{
 //List::size = NULL;
 head = NULL;
 tail = NULL;
}


List::~List()
{
 Node* current;
 while(head != NULL)
 {
  current = head-> next;
  delete current->previous;
  if (current->next!=NULL)
  {
   head = current;
  }
  else
  {
   delete current;
  }
 }
}

void List::add(int element)
{
 Node* newNode;
 Node* current;
 newNode->element = element;
 if(newNode->element > head->element)
 {
  current = head->next;
 }
 else
 {
  head->previous = newNode;
  newNode->next = head;
  newNode->previous = NULL;
  return;
 }

 while(newNode->element > current->element)
 {
  current = current->next;
 }

 if(newNode->element <= current->element)
 {
  newNode->previous = current->previous;
  newNode->next = current;
 }

}


//main.cpp
#include "List.h"
#include <iostream>
#include <string>

using namespace std;
//void add(int element);

int main (char** argv, int argc)
{    
 List* MyList = new List();
 bool quit = false;
 string value;
 int element;

 while(quit==false)
 {
  cin>>value;

  if(value == "add")
  {
   cin>>element;
   MyList->add(element);
  }
  if(value=="quit")
  {
   quit = true;
  }
 }
    return 0;
}

I'm doing everything I think I'm suppose to be doing. main.cpp isn't complete yet, just trying to get the add function to work first. Any help will be greatly appreciated.

+2  A: 

Describe your build process. It looks as though you're not building List.cpp, or else not linking it with main.cpp.

David Seiler
+3  A: 

You're not compiling List.cpp. Add it to the command line.

In main.cpp, it's seeing (from List.h) "Hey, this class with this functionality will exist", but since you're not actually building/linking with List.cpp, it can't find the functions it's looking for.

GMan
A: 

Your command line should look something like g++ -o test.exe main.cpp List.cpp.

The key feature being to include both main.cpp and List.cpp.

There are other ways to do this, but this should get you started.

spong
what I was entering was g++ main.cpp -o list.exeI tried out what you said and used: g++ -o list.exe main.cpp List.cppthe error messages I was getting are no longer there, but it gives me a long list of other errors relating to the location of c:/MinGW/Bin/...
Patrick LaChance
ok I noticed in the error that it mentioned line 68 of my list.cpp. All the errors disappeared when I removed that line, so I just have to figure out whats wrong with it now.Thank you very much for the assistance.
Patrick LaChance
No worries. Good luck getting the rest of it going!
spong