Search code examples
c++classpointersinheritancenon-member-functions

C++ "Invalid use of 'this' in non-member function",


Below are the .cpp versions of my character class and its subclasses. I am trying to get the attack() function to work. I made some changes and the current error deals with "invalid use of ‘this’ in non-member function" in the adjustHP() function. In my main class, I am instantiating a Warrior object which the player plays as and the Goblin as an uncontrollable enemy.

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);
}

Solution

  • In goblin.cpp you defined adjustHP as a non-member function. It should have been:

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