gpt4 book ai didi

c++ - 错误 1 ​​错误 C2259 : 'Player' : cannot instantiate abstract class

转载 作者:行者123 更新时间:2023-11-28 02:49:42 24 4
gpt4 key购买 nike

为什么我不能实例化?为什么player是一个抽象类?我是否仅在基类中声明了纯虚函数?

class Object
{
protected:
public:
virtual void DrawOnScreen() = 0;
};

class Creature : public Object
{
public:
virtual void DrawOnScreen()=0;
virtual void Eat(Object*)=0;
virtual void move(Direction)=0;
};

class Player : public Creature
{
void Player::DrawOnScreen()
{
cout << "position= (" << get_x() << "," << get_y() << ")" << endl << "player's score " << points << endl;
if (get_isKilled()) cout << "It is Killed " << endl;
else cout << "It is Alive " << endl;
}

void Player::eat(Object* p)
{
Point* chk;
chk = dynamic_cast<Point*>(p);
if ((chk != 0) && (get_x() == chk->get_x()) && (get_y() == chk->get_y()) && (chk - > get_isExist()))
{
points = points + chk->get_weight();
chk->set_isExist(false);
}
}

void Player::move(Direction d)
{
if (d == UP)
{
y = y + 2;
}
if (d == DOWN)
{
y = y - 2;
}
if (d == RIGHT)
{
x = x + 2;
}
if (d == LEFT)
{
x = x - 2;
}
}
}

最佳答案

问题是你不能用至少一个纯虚方法实例化一个类,这是由于继承和错误的覆盖而发生在这里。

这是一个错字:

void Player::eat(Object*p)

您的意思是“吃”大写,因此您实际上并没有压倒一切。你应该这样写:

void Player::Eat(Object*p)

最重要的是,您真的应该删除类内方法的 Player:: 作用域,或者将类似的方法移到外部。

此外,请充分利用 C++11 override 关键字来避免此类问题,因此这样的事情会给您带来编译错误:

void Eat(Object *p) override;

关于c++ - 错误 1 ​​错误 C2259 : 'Player' : cannot instantiate abstract class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23350600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com