WSF缺少带有SFML的C ++中的声明

问题描述

我正在使用带有SFML lib的C ++进行游戏,主要是创建了几个函数。我知道这样做主要是一种不好的方式,但是是的。当我尝试编译代码时,出现错误:

src/main.cpp: In function 'void create_platforms(std::vector<std::unique_ptr<sf::Sprite> >&)':
src/main.cpp:12:6: error: no previous declaration for 'void create_platforms(std::vector<std::unique_ptr<sf::Sprite> >&)' [-Werror=missing-declarations]
 void create_platforms(std::vector<std::unique_ptr<sf::Sprite>>& platforms)
      ^~~~~~~~~~~~~~~~src/Player.cpp:
 In member function 'void Player::gravity(sf::Time&,sf::FloatRect&)':

与create_items和create_interface相同。我没有对main.cpp使用任何头文件,可以在main.cpp中声明它们吗?如果是这样,我会很高兴有人帮助我。

void create_platforms(std::vector<std::unique_ptr<sf::Sprite>>& platforms)
{
    [...]
}

void create_items(std::vector<std::unique_ptr<sf::Sprite>>& healing_items)
{
    auto small_heart = std::make_unique<sf::Sprite>();
    small_heart->setTexture(*TextureManager::getTexture("heart"));
    small_heart->setPosition(320,180);
    small_heart->setScale(0.4,0.4);
    healing_items.emplace_back(std::move(small_heart));
}

void create_interface(std::vector<std::unique_ptr<sf::Sprite>>& interface)
{
    auto life = std::make_unique<sf::Sprite>();`enter code here`
    life->setTexture(*TextureManager::getTexture("life"));
    life->setPosition(10,530);
    interface.emplace_back(std::move(life));
}

int main()
{
    [...]
}

解决方法

我可以在main.cpp中声明它们吗?

从技术上讲,是的。对于-Wmissing-declarations选项,重要的是声明在定义之前。放置声明的文件无关。

但是请注意,这可能与警告的精神背道而驰。目前还不清楚为什么当您同时不想使用标头时,为什么要收到有关缺少声明的警告。

如果仅在该翻译单元中使用该函数,则应在匿名名称空间中声明该函数。 -Wmissing-declaration不会警告匿名名称空间中的功能。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...