Hi, here's my problem:
-I want to declare both a pure virtual function and a normal virtual one in my abstract base class. I want to give the non-pure virtual function a definition.

FILE: ScreenElement.h
Code:
#include <iostream>
#include "Screen.h"
using namespace std;

///This class represents a ScreenElement and can be read from a stream and drawn to the screen. This class is an abstract base class.
class ScreenElement{
public:
virtual void draw(Screen& screen) const; ///< A virtual function for drawing a screen element
virtual void read(istream &is) = 0; ///< A pure virtual function for reading a screen element
virtual ~ScreenElement(){}; ///< A virtual destructor
// Needed so destructors are called in order
};
FILE:ScreenElement.cc
Code:
#include "invalid_screen_error.h"
#include <iostream>
#include "ScreenElement.h"
#include "Screen.h"
#include <stdexcept>
using namespace std;

void ScreenElement::draw(Screen &screen) const{
if(&screen == NULL)
throw invalid_screen_error("Screen has not been created. You may not draw to it");
return;
}
I get the error when trying to compile:
g++ -c -Wall Screen.cc
g++ -c -Wall Line.cc
g++ -c -Wall Box.cc
g++ -c -Wall Text.cc
g++ -c -Wall TextBox.cc
g++ -c -Wall draw.cc
g++ -Wall Screen.o Line.o Box.o Text.o TextBox.o draw.o -o draw
Line.o: In function `Line::draw(Screen&) const':
Line.cc.text+0x86): undefined reference to `ScreenElement::draw(Screen&) const'
Line.o: In function `ScreenElement::ScreenElement()':
Line.cc.text._ZN13ScreenElementC2Ev[ScreenElement::ScreenElement()]+0x4): undefined reference to `vtable for ScreenElement'
Line.o: In function `ScreenElement::~ScreenElement()':
Line.cc.text._ZN13ScreenElementD2Ev[ScreenElement::~ScreenElement()]+0x7): undefined reference to `vtable for ScreenElement'
Line.o.rodata._ZTI4Line[typeinfo for Line]+0x8): undefined reference to `typeinfo for ScreenElement'
Box.o.rodata._ZTI3Box[typeinfo for Box]+0x10): undefined reference to `typeinfo for ScreenElement'
Text.o.rodata._ZTI4Text[typeinfo for Text]+0x10): undefined reference to `typeinfo for ScreenElement'
collect2: ld returned 1 exit status
make: *** [draw] Error 1