我无法访问基类的功能

时间:2018-07-29 12:43:35

标签: c++ inheritance sprite sfml

目前,我正在学习c ++,并且只是为了娱乐,我想编写一些国际象棋游戏(当然没有AI)。除了Visual Studio社区,我还使用SFML 2.5作为渲染器和图形对象。我试图为所有数字制作一个称为“图”的模型。所以我有一个从sfml sprite(drawable)和pawn类继承的图类。从图继承。 SF :: Sprite-> Figure-> Pawn / Queen / Tower等...但是由于某种原因,我不能将Pawn用作Sprite,例如,我无法使用windowRenderer的draw函数对其进行绘制。 但是功能文档说它需要一个可绘制的对象。我收到一条错误消息,内容如下:无法访问的基类中的对话无效。我做错了什么吗,还是不可能使用这样的精灵?这是我的构造函数,因为我认为我很可能在那儿犯了一个错误。到目前为止,我仅使用Java进行编码,因此对标头和实现文件的分离对我来说有点陌生,而且构造函数的语法也有所不同。

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

1 个答案:

答案 0 :(得分:6)

尝试一下

class figure : public sf::Sprite

默认情况下,类的继承是私有的。