如何重写基类中的构造函数

How to override the constructor in the base class?

本文关键字:基类 构造函数 重写 何重写      更新时间:2023-10-16

我正在用C++做一个游戏。我有一个继承我的生物职业的玩家和敌人职业。我希望我在敌人类中的构造函数与我的暴民类具有不同的构造函数,但它似乎不起作用。

暴民

#pragma once
#include <SFML/Graphics.hpp>
class Mob
{
public:
     Mob();
    ~Mob();
    void update();
    void render();
protected:
    static sf::Sprite mSprite;
    static float mSpeed;
};

暴民.cpp

#include <SFML/Graphics.hpp>
#include "Enemy.h"
#include "Player.h"
Mob::Mob()
{
}
Mob::~Mob() {
}

敌人。

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

敌人.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);
}

玩家.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);
};

播放器.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);
}

忘记添加我的错误:

Error   3   error C2511: 'void Enemy::update(float,Player)' : overloaded member function not found in 'Enemy'   c:devc++svensvenenemy.cpp  16  1   Sven
Error   1   error C2061: syntax error : identifier 'Player' c:devc++svensvenenemy.h    12  1   Sven
Error   2   error C2061: syntax error : identifier 'Player' c:devc++svensvenenemy.h    12  1   Sven

在 Enemy.h 中,你有void update(float delta, Player player); . 编译器如何知道什么是重戏? 它不能,因为您从未在 enemy.h 中包含 player.h 文件。 您必须选择解决此问题,您可以包含 player.h,也可以转发声明播放器并更改函数以获取指向播放器的指针。