带有SFML的C++中缺少错误声明



我正在用C++和SFML lib制作一个游戏,我主要创建了几个函数。我知道这样做总的来说是不好的,但是是的。当我试图编译代码时,我遇到了错误:

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&)':

createitems和createinterface也是如此。我没有为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声明选项来说,重要的是声明在定义之前。您放入声明的文件是不相关的。

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

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

最新更新