当尝试编译c ++代码(包括sfml api库)时,会发生以下错误:
'C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ VC \ Tools \ MSVC \ 14.10.25017 \ bin \ HostX86 \ x86 \ CL.exe'中的内部编译器错误 在Visual C ++帮助菜单上选择技术支持命令,或打开帮助台文件以获取更多信息 C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ VC \ VCTargets \ Microsoft.CppCommon.targets(358,5):错误MSB6006:“CL.exe”以代码2终止。
我在互联网上搜索了一个解决方案,但我无法解决它... 当我在视觉工作室论坛上寻求帮助时,我得到的唯一答案是:
“感谢您的反馈!此问题已得到修复,将在Visual Studio 2017的下一次更新中提供。感谢您帮助我们构建更好的Visual Studio!“
带有错误的代码:
#include <SFML\Graphics.hpp>
int main() {
sf::RenderWindow window(sf::VideoMode(640, 480), "Bouncing Mushroom");
sf::Texture mushroomTexture;
mushroomTexture.loadFromFile("mushroom.png");
sf::Sprite mushroom(mushroomTexture);
sf::Vector2u size = mushroomTexture.getSize;
mushroom.setOrigin(size.x / 2, size.y / 2);
sf::Vector2f increment(0.4f, 0.4f);
while (window.isOpen())
{
sf::Event evnt;
while (window.pollEvent(evnt))
{
if (evnt.type == sf::Event::Closed)
window.close();
}
if ((mushroom.getPosition().x + (size.x / 2) > window.getSize().x && increment.x > 0) || (mushroom.getPosition().x - (size.x / 2) < 0 && increment.x < 0))
{
// Reverse the direction on X axis.
increment.x = -increment.x;
}
if ((mushroom.getPosition().y + (size.y / 2) > window.getSize().y && increment.y > 0) || (mushroom.getPosition().y - (size.y / 2) < 0 && increment.y < 0))
{
// Reverse the direction on Y axis.
increment.y = -increment.y;
}
mushroom.setPosition(mushroom.getPosition() + increment);
window.clear(sf::Color(16, 16, 16, 255)); // Dark gray.
window.draw(mushroom); // Drawing our sprite.
window.display();
}
答案 0 :(得分:1)
内部编译器错误通常意味着编译器出现问题并且看到它是VS 2017,如果它是一个bug,我不会感到惊讶,因为它是VS的新版本。在此期间,您可以尝试找到触发此错误的代码行,并找到替代解决方案或使用旧版本的Visual Studio。
答案 1 :(得分:0)
我下载了visual studio 2015并尝试在其中运行代码(sfml的所有教程都是在vs 2015中制作的)并运行代码。
我认为问题是sfml的库与vs 2017不兼容,所以解决方案很简单:
- 使用Visual Studio 2015或
- 重新编译Visual Studio 2017的库(我不知道该怎么做)
答案 2 :(得分:0)
如果这是您尝试编译的代码,那么有2个语法错误:
1.-第10行
mushroomTexture.getSize;
getSize是一个来自sf :: Texture类的方法而不是成员,所以只需添加();
mushroomTexture.getSize();
2.-主要功能结束时缺少'}'。 (我认为你没有正确地复制这个,但无论如何都要检查它。
window.display();
}
} <---- end of main() missing
如果这不能解决您的问题,那么您的VS版本可能有错误的SFML文件,如果您使用VS 2017下载 Visual C ++ 14(2015) - 32位版本https://www.sfml-dev.org/download/sfml/2.4.2/适用于VS 2015&amp; 2017(我在VS 2017上使用它来测试你的例子,它运行没有问题)。