首页 > 解决方案 > 如何使用 C++ 中的 SFML 库初始化资产?

问题描述

我一直在开发一个简单的坦克游戏作为 SFML 中的一个项目。这是我第一次使用这个库,在创建 Assets 对象时遇到了一些问题:

游戏标题:

class Game
{
Assets as;
}

资产标题:

Class Assets
{ 
 Assets() {
    loadTextures();
    loadSprites();
} 
public:
    Texture t1;
    Sprite s1;
public:
    void loadTextures();
    void loadSprites();
}

资产 cpp 文件:

 void Assets::loadTextures()
{
if (!t1.loadFromFile("images/tank.png"))
    cout << "Error 42 - File not found " << endl;
}

void Assets::loadSprites()
{
    s1.setTexture(t1);
}

Source.cpp中的主要功能:

int main(int argc, char ** argv)
{
Game game;

return 0;
}

我有一个错误和 2 个注释。错误:'Game::Game(void)':试图引用已删除的函数

注意:编译器在这里生成了'Game::Game'

注意:“Game::Game(void)”:函数被隐式删除,因为基类调用了已删除或无法访问的函数“Assets::Assets(void)”

当我尝试初始化 Assets 对象时,所有这些都会出现,我不知道为什么。

标签: c++objectcompiler-errors

解决方案


资产默认构造函数是私有的,确保它是公共的。

Game 有一个 Assets 对象作为成员。这在创建游戏时默认构造。默认构造函数是私有的,因此无法创建资产对象。


推荐阅读