0

次の2つのクラスがあります。

class Grill
{
public:
  virtual ~Grill();
  virtual std::string get_model() const{return _model;};
  virtual void set_price(float p){_price=p;};
  virtual float get_price() const {return _price;};
  virtual Grill* clone()=0;
protected:
  Grill(std::string m,float p):_model(m),_price(p){};
  Grill(const Grill& obj)=default;
  Grill(Grill&& obj)=default;
  std::string _model;
  float _price;
private:
  Grill& operator=(const Grill& obj)=delete;
};


class Grill_Charcoal final : public Grill
{
 public:
  Grill_Charcoal(std::string m,float p):Grill(m,p){};
  ~Grill_Charcoal(){};
  Grill_Charcoal* clone() override{return new Grill_Charcoal(*this);};
 protected:
  Grill_Charcoal(const Grill_Charcoal& obj)=default;
  Grill_Charcoal(Grill_Charcoal&& obj)=default;
 private:
  Grill_Charcoal& operator=(const Grill_Charcoal& obj)=delete;
};

vector主に、Grill オブジェクトへのポインターを格納する を作成したいと考えています。だから私は作成しますvector<Grill*>。問題は、オブジェクトを作成するときです。私の主なものは次のとおりです。

int main()
{
   using namespace std;

   vector<Grill*> grill;

   Grill_Charcoal* gp=new Grill_Charcoal("adsaas",2312); //Error
   //grill.push_back(new Grill_Charcoal("Sdsaa",22)); //Error as well, not compiled

   return 0;
}

g++ には次のエラーが表示されます。

In function `Grill::Grill(std::string, float)':
program6.cc:(.text._ZN5GrillC2ESsf[_ZN5GrillC5ESsf]+0x1c): undefined reference to `vtable for Grill'
/tmp/ccjLugR9.o: In function `Grill_Charcoal::~Grill_Charcoal()':
program6.cc:(.text._ZN14Grill_CharcoalD2Ev[_ZN14Grill_CharcoalD5Ev]+0x1f): undefined reference to `Grill::~Grill()'
/tmp/ccjLugR9.o: In function `Grill::Grill(Grill const&)':
program6.cc:(.text._ZN5GrillC2ERKS_[_ZN5GrillC5ERKS_]+0x17): undefined reference to `vtable for Grill'
/tmp/ccjLugR9.o:(.rodata._ZTI14Grill_Charcoal[_ZTI14Grill_Charcoal]+0x10): undefined reference to `typeinfo for Grill'
collect2: error: ld returned 1 exit status

なぜこれが起こるのか説明はありますか?

4

1 に答える 1