问题描述
我正在使用带有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不会警告匿名名称空间中的功能。