【问题标题】:Void pointer to class error指向类错误的无效指针
【发布时间】:2016-04-03 15:01:59
【问题描述】:
class Hero
{
public:
    Hero();
    virtual int useAbility(){}
    virtual int basicAttack(){}
    int getHitPoints();
    int getManaPoints();
    void setHitPoints(int x);
    void setManaPoints(int x);
protected:
    unsigned int hitPoints;
    unsigned int manaPoints;
private:
    friend void printHero();

};

class Mage : public Hero
{
public:
    Mage();
    int useAbility();
    int basicAttack();
    std::string getClassName();
protected:
private:
    std::string className;

};

战士也一样

int input;
void *actor;
cin >> input;
if(input == 1) actor = new Warrior;
if(input == 2) actor = new Mage;
printHero(actor.getClassName(),actor.getHitPoints(),actor.getManaPoints());

所以我声明了指针'actor',我希望它成为一个类的指针,但显然它不起作用。

我收到此错误

对'actor'中的成员'getClassName'的请求,它是非类类型'void*'

【问题讨论】:

  • void * 上没有方法。
  • 恕我直言 - 当程序员使用 void 指针时,他们通常会做错事
  • 查找抽象类
  • 你需要从同一个类(至少有1个虚函数)继承WarriorMage,然后将actor类型改为指向该类的指针。
  • 就是这样建的,我试过了,也不行

标签: c++ class pointers


【解决方案1】:

战士和法师都有父类人。

你想做什么:

person *actor;

【讨论】:

  • 1) 从给出的示例中,您无法知道 Warrior/Mage 类是否有父类(甚至这些类是如何定义的)。 2)示例(带解释)需要更深入。
  • 我已经试过了,但是方法不在父类中
  • 类法师:公共英雄(战士也一样)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 2023-03-17
  • 1970-01-01
  • 2017-09-16
  • 2016-08-08
  • 2014-05-14
相关资源
最近更新 更多