我的代码中的C ++未定义引用错误?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的代码中的C ++未定义引用错误?相关的知识,希望对你有一定的参考价值。
我的代码块编译器向我的代码提供了“对vtable Plant的未定义引用错误”,我已经阅读了本页中的其他文章,但是并没有解决我的问题。我尝试添加虚拟和普通析构函数。请查看我的代码,并尝试使用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
#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
#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);
答案
只需定义Plant::nap
:
class Plant
public:
...
// Probably stupid code, but just for example
virtual SugarzasIgeny nap(Sugarzas sugarzas) return SugarzasIgeny(Sugarzas::ALFA);
...
;
或使其成为纯虚拟的:
class Plant
public:
...
// Pure virtual, no need for code, but class is then non instanciable
virtual SugarzasIgeny nap(Sugarzas sugarzas)=0;
...
;
以上是关于我的代码中的C ++未定义引用错误?的主要内容,如果未能解决你的问题,请参考以下文章