C ++“在非成员函数中无效使用'this'”,

问题描述 投票:0回答:2

下面是我的角色类及其子类的.cpp版本。我正在尝试使Attack()函数起作用。我进行了一些更改,当前错误涉及adjustHP()函数中的“在非成员函数中无效使用'this'”。在我的主要课程中,我实例化了一个玩家扮演的战士对象,而地精则成为了无法控制的敌人。

character.cpp

character::character(double hp ,double atk, double defense, double speed){
    this->hp= hp;
    this->atk = atk;
    this->defense = defense;
    this->speed = speed;
}

double character::getHP() {
    return this->hp;
}

double character::getATK() {
    return this->atk;
}

double character::getDEFENSE() {
    return this->defense;
}

double character::getSPEED() {
    return this->speed;
}

warrior.cpp

Warrior::Warrior():character(hp,atk,defense,speed) { // Constructor
    this->hp= 50;
    this->atk = 50;
    this->defense = 50;
    this->speed = 50;
}

void Warrior::adjustHP(double adjustBy) {
    this->hp = this->hp - adjustBy;
}

void Warrior::attack(character* enemy) {
    enemy->adjustHP(10);
}

goblin.cpp

Goblin::Goblin() : character(hp,atk,defense,speed) { // Constructor
    this->hp= 60;
    this->atk = 40;
    this->defense = 40;
    this->speed = 40;
}

void adjustHP(double adjustBy) {
    this->hp = this->hp-adjustBy;
}

void Goblin::attack(character* playerChoice ) {
    playerChoice->adjustHP(10);
}
c++ class pointers inheritance non-member-functions
2个回答
1
投票

在goblin.cpp中,您将adjustHP定义为非成员函数。应该是:

void Goblin::adjustHP(double adjustBy) {
this->hp = this->hp-adjustBy;
}

1
投票

比较您的

void adjustHP(double adjustBy) {

具有您的意图:

void Goblin::adjustHP(double adjustBy) {

C ++不会阻止您在adjustHP中定义不相关的免费goblin.cpp函数,并在该文件中保留Goblin::adjustHP的未定义。

© www.soinside.com 2019 - 2024. All rights reserved.