Q:

how to build an program with classes in c++

I have to write a simple class library. There are two classes Element and Permutation.
File Element.h
#ifndef ELEMENT_H
#define ELEMENT_H

class Element
{
public: 
    virtual ~Element()=0;
    virtual bool IsEven()=0;
    virtual bool IsNeutral()=0;
};

#endif

File Permutation.h
#ifndef PERMUTATION_H
#define PERMUTATION_H

#include "Element.h"

class Permutation: public Element
{
private:
    int* numbers; 

public:
    const int k;
    Permutation(const int, int*); 
    Permutation(const int); 
    Permutation(); 
    ~Permutation(); 
    int NumberOfInversions(); 
    bool IsEven(); 
    bool IsNeutral(); 

    friend Permutation operator+(const Permutation&, const Permutation&); 
    friend Permutation operator-(const Permutation&); 
};

#endif

And I have Permutation.cpp that implements class Permutation. Class Element is abstract, so it has not any .cpp file with realization. So, I want to write a simple test program (with main) that uses class Permutation. How should I build my project? I use g++ compiler on linux platform. 
Here is my Makefile that doesn't work:
all: permutation_test

permutation_test: fuf.o Permutation.o 
    g++ fuf.o Permutation.o -o permutation_test
fuf.o: fuf.cpp
    g++ -c fuf.cpp 
Permutation.o: Permutation.cpp 
    g++ -c Permutation.cpp 

clean:
   rm -rf *o permuatation_test

(fuf.cpp contains the main method.)
error:
Permutation.o: in function «Permutation::Permutation(int, int*)»:
Permutation.cpp:(.text+0xd): undefined reference «Element::Element()»
Permutation.o: in function «Permutation::Permutation(int)»:
Permutation.cpp:(.text+0x3c): undefined reference «Element::Element()»
Permutation.cpp:(.text+0xac): undefined reference «Element::~Element()»
Permutation.o: in function «Permutation::Permutation()»:
Permutation.cpp:(.text+0xcd): undefined reference «Element::Element()»
Permutation.o: in function «Permutation::~Permutation()»:
Permutation.cpp:(.text+0x11e): undefined reference «Element::~Element()»
collect2: error: ld returned 1 exit status
It works now. thanks for replies. I have just replaced pure virtual destructor with virtual and deleted constructor in class Element

A:

Even if you make the destructor pure virtual, you still need to provide a definition for it, otherwise the subclass' destructor can never call it, like it must.
To fix the compilation error, add
inline Element::~Element() {}

to Element.h.
(It's not well known that you can provide definitions for pure virtual functions.)
There's some discussion of providing definition for pure virtuals in an old Guru of the Week by Herb Sutter.
On the other hand:
I must say that in this case, it makes very little sense to have a pure virtual destructor - I can't think of any other use for one than to make a class abstract when it doesn't have any other virtual functions.
The best solution would be to ditch Element's destructor altogether, as it serves no purpose other than to cause confusion.

