I have this C++ code, and I get undefined reference to vtable for Plant error with CodeBlocks I use Cpp11 complier. My real problem is that I can not fill the vector. I have already tried to add and remove destructors both virtual and normal (~Plant() {};) and I get the same error. The error in line 21 in my header file.
#include <iostream>    
#include <vector>
#include <cstdlib>
#include <fstream>
#include <vector>    
#include "Plant.h"   
using namespace std;
int main(){   
            vector<Plant*> novenyek;
            int novenyszam = 3;
            for (int i=0; i<novenyszam; i++){
                string a = "Falank";
             //  novenyek.push_back(new Puffancs(a,7,true));
              //new Puffancs("Falank",7,true);
              //novenyek.push_back(new Puffancs("a",7,true));
              novenyek[i] = new Plant(Puffancs("nev",7,true));
              /// here is my error I can not make this vector with plants
            }
            ///OUTput    
        for(auto i = novenyek().begin(); i != novenyek().end(); ++i)
        {           
        }
    }
    return 0; }
My header:
    #pragma once
    #include <string>
    #include <ostream>
    #include <stdlib.h>
    enum Sugarzas
    {
        ALFA,
        DELTA,
        NONE,
    };
    struct SugarzasIgeny
    {
        Sugarzas _sugarzas;
        int _mennyiseg;
        SugarzasIgeny(Sugarzas sugarzas, int mennyiseg = 0): _mennyiseg(mennyiseg), _sugarzas(sugarzas) {}
    };
    class Plant
    {
    public:
       Plant(const std::string &nev, int tapanyag, bool El_e) : _nev(nev), _tapanyag(tapanyag), _El_e(El_e) {}
      //~Plant() {};
        std::string nev() const { return _nev; }
        int tapanyag() const { return _tapanyag; }
        bool El_e() const { return _El_e; }
        // Sablonfuggveny
        virtual SugarzasIgeny nap(Sugarzas sugarzas);
    protected:
        std::string _nev; //noveny neve
        int _tapanyag;    //tapanyaga
        bool _El_e;       //ele
    };
    class Puffancs : public Plant
    {
    public:
        Puffancs(const std::string &nev, int tapanyag, bool El_e) : Plant(nev, tapanyag, El_e) {}
        virtual  SugarzasIgeny nap(Sugarzas sugarzas) ;
    };
    class Deltafa : public Plant
    {
    public:
        Deltafa(const std::string &nev, int tapanyag, bool El_e) : Plant(nev, tapanyag, El_e) {}
        virtual  SugarzasIgeny nap(Sugarzas sugarzas) ;
    };
    class Parabokor : public Plant
    {
    public:
        Parabokor(const std::string &nev, int tapanyag, bool El_e) : Plant(nev, tapanyag, El_e) {}
        virtual SugarzasIgeny nap(Sugarzas sugarzas) ;
    };
My plant.cpp file
#include "Plant.h"
SugarzasIgeny Puffancs::nap(Sugarzas sugarzas)
{
    switch (sugarzas)
    {
    case Sugarzas::ALFA :
        _tapanyag += 2;
        break;
    case Sugarzas::DELTA :
        _tapanyag -= 2;
        break;
    case Sugarzas::NONE :
        _tapanyag -= 1;
        break;
    default:
        break;
    }
    if ( _tapanyag > 0 && _tapanyag <=10){
         _El_e = false;
    }else {
        _El_e = true;
    }
    return SugarzasIgeny(Sugarzas::ALFA, 10);
}
SugarzasIgeny Deltafa::nap(Sugarzas sugarzas)
{
    switch (sugarzas)
    {
    case Sugarzas::ALFA :
        _tapanyag -= 3;
        break;
    case Sugarzas::DELTA :
        _tapanyag += 4;
        break;
    case Sugarzas::NONE :
        _tapanyag -= 1;
        break;
    default:
        break;
    }
    if (_tapanyag > 0)
        {_El_e = true;}
    else {_El_e = false; }
    if (_tapanyag <5 ){
        return SugarzasIgeny(Sugarzas::DELTA, 4);
    }
    else if (_tapanyag >= 5 && _tapanyag <= 10 ){
        return SugarzasIgeny(Sugarzas::DELTA, 1);
    }else {
         return SugarzasIgeny(Sugarzas::NONE, 10);
    }
}
SugarzasIgeny Parabokor::nap(Sugarzas sugarzas)
{
    switch (sugarzas)
    {
    case Sugarzas::ALFA :
        _tapanyag++;
        break;
    case Sugarzas::DELTA :
        _tapanyag++;
        break;
    case Sugarzas::NONE :
        _tapanyag--;
        break;
    default:
        break;
    }
   // _El_e = tapanyag > 0;
    if (_tapanyag > 0){_El_e = true;}
    else {_El_e = false;}
    return SugarzasIgeny(Sugarzas::NONE, 10);
}
