0

I'm making a game in C++. I have a player and enemy class that inherit my mob class. I would like my constructor in the enemy class to have a different constructor than my mob class, but it doesn't seem to work.

Mob.h

#pragma once

#include <SFML/Graphics.hpp>

class Mob
{
public:
     Mob();
    ~Mob();

    void update();
    void render();

protected:
    static sf::Sprite mSprite;

    static float mSpeed;
};

Mob.cpp

#include <SFML/Graphics.hpp>
#include "Enemy.h"
#include "Player.h"

Mob::Mob()
{

}

Mob::~Mob() {

}

Enemy.h

#pragma once

#include <SFML/Graphics.hpp>
#include "Mob.h"

class Enemy : public Mob
{
public:
    Enemy(sf::Sprite sprite);
    ~Enemy();

    void update(float delta, Player player);
    void render(sf::RenderWindow& window);
};

Enemy.cpp

#include <SFML/Graphics.hpp>
#include "Enemy.h"
#include "Player.h"

Enemy::Enemy(sf::Sprite sprite)
{
    mSprite = sprite;

    mSpeed = 150.0f;
}

Enemy::~Enemy() {

}

void Enemy::update(float delta, Player player) {

}

void Enemy::render(sf::RenderWindow& window) {
    window.draw(mSprite);
}

Player.h

#pragma once

#include <SFML/Graphics.hpp>
#include "Mob.h"

class Player : public Mob
{
public:
    Player(sf::Sprite sprite);
    ~Player();

    void update(float delta);
    void render(sf::RenderWindow& window);
};

Player.cpp

#include <SFML/Graphics.hpp>
#include "Player.h"

Player::Player(sf::Sprite sprite)
{
    mSprite = sprite;

    mSpeed = 150.0f;
}

Player::~Player() {

}

void Player::update(float delta) {

    if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
    {
        mSprite.move(0, -mSpeed * delta);
    }
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
    {
        mSprite.move(-mSpeed * delta, 0);
    }
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
    {
        mSprite.move(0, mSpeed * delta);
    }
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
    {
        mSprite.move(mSpeed * delta, 0);
    }
}

void Player::render(sf::RenderWindow& window) {
    window.draw(mSprite);
}

Forgot to add my errors:

Error   3   error C2511: 'void Enemy::update(float,Player)' : overloaded member function not found in 'Enemy'   c:\dev\c++\sven\sven\enemy.cpp  16  1   Sven
Error   1   error C2061: syntax error : identifier 'Player' c:\dev\c++\sven\sven\enemy.h    12  1   Sven
Error   2   error C2061: syntax error : identifier 'Player' c:\dev\c++\sven\sven\enemy.h    12  1   Sven
David G
  • 94,763
  • 41
  • 167
  • 253
Wahoozel
  • 287
  • 4
  • 16

1 Answers1

1

In Enemy.h you have void update(float delta, Player player);. How does the compiler know what a play is? It cant since you never included the player.h file in enemy.h. You have to options to fix this you can either include player.h or you could forward declare player and change the function to take a pointer to a player.

Community
  • 1
  • 1
NathanOliver
  • 171,901
  • 28
  • 288
  • 402