我正在使用带有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将不会警告匿名名称空间中的功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句