Search code examples
c++inheritancespritesfml

I cant acces functions of a base class


Currently, I am learning c++ and just for fun, I wanted to code a little chess game (without an AI of course). I use visual studio community aside and SFML 2.5 as a renderer and for graphical objects. I tried to make a model called "figure" for all figures. So I have a figure class that inherits from sfml sprite (a drawable) and a pawn class f.e. that inherits from the figure. Sf:: sprite -> figure-> pawn/queen/tower etc... but for some reason, I can't use the pawn as a sprite, for example, I can't draw it with the draw function of my windowRenderer. But the function documentation says it requires a drawable object. I get an error message that says something like: the conversation in the base class that is not accessible is not valid. Have I done something wrong or is it not possible to use a sprite like this. Here are my constructors because I think I its most likely I made an error there. I have only coded in java so far so the separation into header and implementation file is a little foreign for me also the constructor syntax is different.

figure.h:

class figure : sf::Sprite {
public:
    figure(int startPosition);
    void changeImage(std::string);
    void dissapear();
    void loadImage(std::string);
private:
    sf::Image img;
};


figure.cpp:

figure::figure(int startPosition):sf::Sprite(){

}


pawn.h:

class pawn :
    public figure
{
public:
    pawn(int startPosition);
    ~pawn();

private:
    void move(bool canBeat, bool isAsStart);
};


pawn.cpp:
pawn::pawn(int startPosition):figure (startPosition)
{

}


in main.cpp:

pawn pawn1(position);
sf::RenderWindow window(sf::VideoMode(sets.windowX, sets.windowY), "frame");
window.draw(pawn1);

Solution

  • Try this

    class figure : public sf::Sprite
    

    Inheritence for classes is private by default.