[英]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.