-1

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);
}

1 Answers1

0

My Plant.cpp code below:

#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);
}