以下のC++コードをコンパイルし、私は次のようなエラーメッセージが出てい:C++動的バインディングとpure仮想クラスを使用するときの正しい構文は何ですか?
「抽象クラスタイプ 『TrainerClass』が無効new式は関数 『仮想のボイドTrainerClass :: AddItemsは()』内に純粋であるため、 'TrainerClass' "
このコードの目的は、トレーナーの数(int nbrtrainer = 2;)に相当する数の「stuff」オブジェクトを初期化することです。この例では、stuff [0]とstuff [1]( 'TrainerClass'クラスへのポインタ)という2つのstuffオブジェクトを作成する必要があります。次に、各「stuff」オブジェクトの内部は、「BagClass」クラスを「stuff」オブジェクトに指定することで定義する必要があります。
難しいのは、 'TrainerClass'クラスには、クラスオブジェクトをいつものように初期化することを防ぐ純粋な仮想関数が含まれていることです。
動的バインディングの概念を使用して仮想クラスから派生したオブジェクトを初期化する正しい構文は何ですか? (すべてのオブジェクトは、インデックスを使用して '[x]のようなもの' と呼ばれるべきである)
#include <iostream>
using namespace std;
#define Training // to declare the global variable
///Definition of class Pocket
class pocket
{
public:
double volume;
};
///Definition of virtual class TrainerClass
class TrainerClass
{
public:
pocket *Space;
virtual void AddItems()=0;
};
///Definition of derived class
class BagClass: public TrainerClass
{
public:
double mass;
BagClass(double m2)
{
mass=m2;
}
void AddItems()
{
cout << "out virtual " << endl;
}
};
#ifdef Training
#define Training
TrainerClass **stuff=0;
#else
extern TrainerClass **stuff;
#endif
int main()
{
int nbrtrainer = 2;
TrainerClass **stuff;
for(int itrainer=0;itrainer<nbrtrainer;itrainer++) stuff[itrainer] = new TrainerClass;
stuff[0] = new BagClass(0.2);
stuff[1] = new BagClass(0.5);
stuff[0]->AddItems();
return 0;
}
を使用することです++メモリを扱い、おそらく[良い本](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を開くべきです - ここにはいくつかのさまざまなエラーがあります、そしてそれについての良い本を読むことによって解決される可能性のある平凡な悪い習慣の数例があります。 – jaggedSpire