1

我有一个Character .h/.cpp,一个Enemy .h/.cpp和一个Driver

如果我将字符传递给一个函数Enemy,我有

ENEMY.CPP: void Enemy::enemyAttack(Character *character)
{ //whatever needs to be done }

效果很好。

但是回到我的驱动程序,如果我这样做:

Character *character = new Character();
Enemy::enemyAttack(character);

我收到以下错误消息:“非静态成员引用必须相对于特定对象。” 字符不是特定的对象吗?

4

2 回答 2

4

不,错误是在谈论 Enemy 对象。要调用非静态 Enemy 方法,您必须有一个 Enemy 对象。

Enemy en;
en.enemyAttack(character);

想一想,当你写

Enemy::enemyAttack(character);

攻击的是哪个敌人?没有一个。

于 2012-11-13T19:00:43.793 回答
2

enemyAttack是 的非静态成员函数Enemy。这意味着您需要一些Enemy对象来调用它。目前您正试图将其称为静态函数。你需要这样的东西:

Enemy monster;
monster.enemyAttack(character);

通常,你会简单地命名你的函数attack,因为它已经是Enemy. 你会发现它读起来更好:

Enemy monster;
monster.attack(character);
于 2012-11-13T19:00:06.480 回答