-3

所以,我得到了这样的代码:

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
}

但是,我在“this-Fruit->banana();”中遇到错误 该状态“不允许指向不完整的类类型。我的代码有问题吗?谢谢

4

3 回答 3

2

如果要thisFruit指向 Banana 对象,则需要thisFruit使用Banana对象进行初始化

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

当您将本机指针作为成员时,请确保遵循三规则。由于 C++11 即将到来,因此读取规则为零。

于 2013-02-17T23:10:20.090 回答
1

您必须使用std::unique_ptr或另一个智能指针并使用 new 对其进行初始化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
}

请参阅零规则权威 C++ 书籍指南和列表

于 2013-02-17T23:20:03.477 回答
1

这个

thisFruit->Banana();

没有任何意义。你大概是说

thisFruit = new Banana();

确保delete thisFruit在您的析构函数中并提供合适的分配运算符。或者让自己的生活更轻松,并使用智能指针,例如boost::scoped_ptr<Fruit>or std::unique_ptr<Fruit>

于 2013-02-17T23:10:08.810 回答