This code compiles, links and works as intended:
#include <QApplication>
#include <QListView>
#include "File_List_Model.h"
int main(int c,char**v)
{
    QApplication app(c,v);
    QStringList list;
    list << "a" << "b" << "c";
    File_List_Model* model = new File_List_Model;
    model->set_entries(list);
    QListView* view = new QListView;
    view->setModel(model);
    view->show();
    return app.exec();
} 
But when I put the class definition in .cpp file instead of header files, I get linker errors stating that vtable was not properly defined.
#include <QApplication>
#include <QListView>
//#include "File_List_Model.h"
#include "File_List_Proxy.h"
#include <QAbstractItemModel>
#include <QStringList>
class File_List_Model : public QAbstractItemModel
{
    Q_OBJECT
private:
    QStringList data_;
public:
    File_List_Model(QObject *parent = 0) :
        QAbstractItemModel(parent)
    {
    }
    int columnCount(const QModelIndex& parent) const
    {
        return 1;
    }
    QVariant data(const QModelIndex & index, int role) const
    {
        switch(role)
        {
            case Qt::DisplayRole:
            return data_[index.row()];
        default:
            return QVariant();
        }
    }
     QModelIndex index(int row, int column, const QModelIndex & parent) const
    {
        return createIndex(row,column);
    }
    QModelIndex parent(const QModelIndex & index) const
    {
        return QModelIndex();
    }
     bool set_entries(const QStringList& entries)
     {
         if (entries.size())
         {
         beginInsertRows(createIndex(0,0),0,entries.size());
         data_ = entries;
         endInsertRows();
         emit dataChanged(createIndex(0,0),createIndex(0,entries.size()));
         return true;
         }
         else
         {
             return false;
         }
     }
     int rowCount(const QModelIndex & parent) const
     {
         return data_.size();
     }
};
int main(int c,char**v)
{
    QApplication app(c,v);
    QStringList list;
    list << "a" << "b" << "c";
    File_List_Model* model = new File_List_Model;
    model->set_entries(list);
    File_List_Proxy* proxy = new File_List_Proxy;
    proxy->setSourceModel(model);
    QListView* view = new QListView;
    view->setModel(proxy);
    view->show();
    return app.exec();
}
//error:   
debug/moc_File_List_Model.o:moc_File_List_Model.cpp:(.rdata$_ZTV15File_List_Model[vtable for File_List_Model]+0x44): undefined reference to `File_List_Model::columnCount(QModelIndex const&) const'
debug/moc_File_List_Model.o:moc_File_List_Model.cpp:(.rdata$_ZTV15File_List_Model[vtable for File_List_Model]+0x4c): undefined reference to `File_List_Model::data(QModelIndex const&, int) const'
This seems to be exactly the same code. Why does it link when the code is in headers and it doesn't link otherwise?
 
     
     
     
    