简体   繁体   English

C++ 我的代码中有未定义的引用错误?

[英]C++ undefined reference error in my code?

My code blocks complier give 'undefined reference error to vtable Plant' to my code I have already read oteher articles in this page, but that did not resolved my issue.我的代码块编译器为我的代码提供了“vtable Plant 未定义的引用错误”我已经阅读了此页面中的其他文章,但这并没有解决我的问题。 I tried to add both virtual and normal destructor.我尝试添加虚拟和普通析构函数。 Please review my code and try to run it in Code::Blocks with cpp11 and this topic is not a duplicate: Here my code :请查看我的代码并尝试使用 cpp11 在 Code::Blocks 中运行它,这个主题不是重复的:这里是我的代码:

#include <iostream>    
#include <vector>
#include <cstdlib>
#include <fstream>
#include <vector>
#include <time.h>

#include "Plant.h"



using namespace std;

int main(){



            vector<Plant*> novenyek;
            int novenyszam = 5;
            f >> novenyszam;
            novenyek.resize(novenyszam);
          //  novenyek[i].push_back(new Deltafa("a",0,true)); //thhis does not work 
            for (int i=0; i<novenyszam; i++){
               /* string tempname;
                string tempfajta;
                string temptapanyag;
            */
              //  string a = "Falank";
     // novenyek[i] =  new Puffancs(a,7,true);

      novenyek[i] = new Deltafa("a",0,true);

              //new Puffancs("Falank",7,true);

        //novenyek.push_back(new Puffancs("a",7,true));
//      novenyek[i] = new Plant(Puffancs("nev",7,true));

           //  novenyek.push_back();

            }
    return 0;
}

Plant.h植物.h

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


        std::string nev() const { return _nev; }
        int tapanyag() const { return _tapanyag; }
        bool El_e() const { return _El_e; }

        // Sablonfuggveny
        virtual SugarzasIgeny nap(Sugarzas sugarzas);
      ~Plant () {}
protected:


    std::string _nev; //noveny neve
    int _tapanyag;    //tapanyaga
    bool _El_e;       //ele

    Plant(const std::string &nev, int tapanyag, bool El_e) : _nev(nev), _tapanyag(tapanyag), _El_e(El_e) {}
};


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

Plant.cpp植物.cpp

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

Just define Plant::nap :只需定义Plant::nap

class Plant {
public:
    ...
    // Probably stupid code, but just for example
    virtual SugarzasIgeny nap(Sugarzas sugarzas) { return SugarzasIgeny(Sugarzas::ALFA); }
...
};

or make it pure virtual:或使其成为纯虚拟:

class Plant {
public:
    ...
    // Pure virtual, no need for code, but class is then non instanciable
    virtual SugarzasIgeny nap(Sugarzas sugarzas)=0;
...
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM