-3

So, I got a code like this:

class Fruit
{//some constructor method and instance in here}

class Banana: public Fruit
{//some constructor method and instance in here}

class plant
{
public:
    plant(){
      thisFruit->Banana();//everytime a new plant is created, its thisFruit will point to a new Banana Object
    }
private:
    Fruit *thisFruit;//this plant has a pointer to a fruit
}

however, I got an error in the "this-Fruit->banana();" that state "pointer to incomplete class type is not allowed. is there something wrong with my code? thx

4

3 に答える 3

2

バナナオブジェクトをポイントする場合は、オブジェクトthisFruitで初期化する必要がありますthisFruitBanana

plant::plant()
: thisFruit(new Banana())
{
}

ただし、メンバーとしてネイティブポインターがある場合は、必ず3のルールに従ってください。C ++ 11が間近に迫っているので、読み取りルールをゼロにします。

于 2013-02-17T23:10:20.090 に答える
1

これ

thisFruit->Banana();

意味がありません。あなたはおそらく意味します

thisFruit = new Banana();

ただし、必ずdelete thisFruitデストラクタに入れて、適切な割り当て演算子を提供してください。または、自分の生活を楽にして、スマートポインタを使用します(例:boost::scoped_ptr<Fruit>または)std::unique_ptr<Fruit>

于 2013-02-17T23:10:08.810 に答える
1

std::unique_ptrまたは別のスマート ポインターを使用し、新しい で初期化する必要がありますBanana

#include <memory>

class Fruit {
    //some constructor method and instance in here
}

class Banana : public Fruit {
    //some constructor method and instance in here
}

class Plant {
public:
    Plant() : thisFruit{new Banana} {

    }

private:
    std::unique_ptr<Fruit> thisFruit; //this plant has a pointer to a fruit
}

Rule of ZeroおよびThe Definitive C++ Book Guide and Listを参照してください。

于 2013-02-17T23:20:03.477 に答える