gpt4 book ai didi

c++ - 使用 SFML 的 C++ 中缺少声明的错误

转载 作者:行者123 更新时间:2023-12-03 06:57:13 24 4
gpt4 key购买 nike

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

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()
{
[...]
}

最佳答案

can I just declare those in main.cpp?

从技术上来说是的。对于 -Wmissing-declarations 选项来说重要的是声明位于定义之前。您放置声明的文件无关紧要。

但请注意,这可能违反警告的精神。目前还不清楚为什么当您同时不想使用 header 时想要收到有关缺少声明的警告。

如果该函数仅在该翻译单元中使用,那么您应该在匿名命名空间中声明它。 -Wmissing-声明不会对匿名命名空间中的函数发出警告。

关于c++ - 使用 SFML 的 C++ 中缺少声明的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63471924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com