所以我一直在学习C ++,我一直试图通过一些视频来学习一些SFML 2。起初我没有真正的问题,我使用MS VS2012,一切都很好。我开始使用MS VS2015社区,这一切都开始出错,我不明白为什么!
主要问题:
所有内容都会编译,但当我尝试使用sf :: RenderWindow :: createWindow()
时它会崩溃错误消息:
我收到消息“SFML_Project.exe不再有效”, 我去调试它,它给了我以下信息:
抛出未处理的异常:读取访问冲突。 this-> _Ptr是0xCCCCCCCC。 如果存在此异常的处理程序,则可以安全地继续该程序。
它在这个函数上做了(一些我一无所知的SFML代码)
const facet *_Getfacet(size_t _Id) const
{ // look up a facet in locale object
const facet *_Facptr = _Id < _Ptr->_Facetcount
? _Ptr->_Facetvec[_Id] : 0; // null if id off end <- ON THIS LINE OF CODE IT BREAKS
if (_Facptr != 0 || !_Ptr->_Xparent)
return (_Facptr); // found facet or not transparent
else
{ // look in current locale
locale::_Locimp *_Ptr = _Getgloballocale();
return (_Id < _Ptr->_Facetcount
? _Ptr->_Facetvec[_Id] // get from current locale
: 0); // no entry in current locale
}
}
在调用堆栈中给出的信息行
sfml-system-d-2.dll!std :: locale :: _ Getfacet(unsigned int _Id)Line 451 C ++
我的代码:
#include <iostream>
#include "SFML\Graphics.hpp"
int main()
{
sf::RenderWindow window;
window.create(sf::VideoMode(800, 800), "WindowName");
sf::Texture texture;
sf::Sprite sprite;
texture.loadFromFile("Player.png");
sprite.setTexture(texture);
sf::Event eventHandler;
while(window.isOpen())
{
while(window.pollEvent(eventHandler))
{
switch(eventHandler.type)
{
case sf::Event::Closed:
window.close();
break;
}
}
window.clear();
window.draw(sprite);
window.display();
}
}
SFML版本: Visual C ++ 14(2015) - 32位
项目属性:
调试 - &gt; C / C ++ - &gt;一般 - &gt;其他包含目录:
调试 - &gt;链接器 - &gt;一般 - &gt;其他图书馆馆目:
调试 - &gt;链接器 - &gt;输入 - &gt;附加依赖项:
我尝试了什么:
我已经尝试将所有依赖项从sfml-XX-d.lib转换为sfml-XX.lib文件,这允许我创建一个窗口并将形状绘制到该窗口,但是当我尝试使用sf时:: Texture :: loadFromFile(“filename”)控制台命令窗口变成矩阵并开始发出哔哔声。
答案 0 :(得分:0)
可能是因为你在图形库之前链接了窗口lib。
尝试向上移动图形库下的窗口库。
sfml-graphics-d.lib
sfml-window-d.lib
sfml-system-d.lib
如果它仍然崩溃,可能是因为你的sfml的dll与你当前的sfml版本不匹配。发生过一次,我下载了新版本的sfml而没有更新二进制文件。