C++ 不捕获异常

C++ 不捕获异常,c++,exception-handling,C++,Exception Handling,类似的问题很少,但大多数问题都是通过在函数声明后删除throw()来解决的,所以这些问题(可能)并不是我问题的解决方案 我在SFML2.1中为我未来的项目创建了资源管理器,所以我需要在那里进行一些错误处理 我有一个方法: sf::Music & cResourceManager::getMusic(const std::string & key) { if(key.empty()) throw std::invalid_argument("empty key");

类似的问题很少,但大多数问题都是通过在函数声明后删除throw()来解决的,所以这些问题(可能)并不是我问题的解决方案

我在SFML2.1中为我未来的项目创建了资源管理器,所以我需要在那里进行一些错误处理

我有一个方法:

sf::Music & cResourceManager::getMusic(const std::string & key) {
    if(key.empty()) throw std::invalid_argument("empty key");
    return MusicObject;
}
这似乎毫无意义,但现在只是为了测试目的

那么主要是:

试试看{
资源管理器。getMusic(“”);
}捕获(const std::runtime_error&ob){
std::cout我再次进行了一些“注释”研究和测试。结果非常尴尬,因为我陷入了自己的懒惰和时间陷阱。我设法发现SFML对象造成了问题,所以是时候检查所有项目和C::B设置了。在清除它们之后(删除配置文件等等)它开始工作(“魔术”),所以在调查了clear和我的旧配置文件后,我找到了真正的麻烦制造者-链接器设置:

-静态-静态libgcc-静态libstdc++

由于我将SFML编译为动态版本,所以出现了明显的冲突


对不起,浪费你的时间,谢谢你的所有提示。

代码>键。比较(“”)==0 应该是<代码>键。。在调试器中运行您的程序,它会捕获它。。我怀疑您的
MusicObject
不再是有效的对象了?您能说明这是从哪里来的吗?访问冲突之类的异常不会继承自std::exception(至少在visual studio中)所以play()可能会抛出类似的问题。我已经用
empty()
更新了这个问题,并删除了
play()
,以确定这不是原因。没有变化。如果我设法以正确的方式调试它,code::Blocks会在调试器“控制台”中的
std::string::size()const()
中抛出SIGSEGV
try {
    RESOURCE_MANAGER.getMusic("");
} catch (const std::runtime_error &ob) {
    std::cout << ob.what() << std::endl;
} catch (const std::invalid_argument &ob) {
    std::cout << ob.what() << std::endl;
} catch (...) {
    std::cout << "unknown error\n";
}