为什么catch中的代码没有被执行
Why code inside catch does not get executed
我有一个Foo类,如下
Foo.h
#pragma once
class Foo
{
public:
Foo() = default;
~Foo() = default;
void DoSomething();
};
Foo.cpp
#include "Foo.h"
void Foo::DoSomething()
{
throw "something happened";
}
我使用的类是:
#include <iostream>
#include "Foo.h"
int main()
{
try
{
Foo foo;
foo.DoSomething();
}
catch (std::exception& e)
{
std::cout << e.what() << std::endl;
}
}
我希望代码进入catch块。然而,它从来没有进入那里。我在这里做错了什么?
进行时
throw "something happened"
你不是在扔std::exception
。您正在抛出一个类型为const char[N]
的字符串文字。要捕捉它,你需要一个像这样的捕捉块
catch (const char* e)
{
std::cout << e << std::endl;
}
或者,你可以抛出一些从std::exception
派生的东西,比如std::runtime_error
,看起来像
void Foo::DoSomething()
{
throw std::runtime_error("something happened");
}
...
catch (const std::exception& e) // catch by reference to const
{
std::cout << e.what() << std::endl;
}
您还可以指定一个默认的处理程序,如
catch (...)
{
std::cout << "something bad happened - cannot recover" << std::endl;
}
它将捕获任何抛出的异常,但您将无法访问抛出的任何异常,因此只能给出一般消息。
相关文章:
- 需要将此代码更改为执行代码
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- 单步执行代码时重复上一行
- 如何使用介子在C++中执行代码覆盖?
- Visual Studio 2017,C++,在单步执行代码时指向错误的行
- 在 R 中执行C++代码
- 通过 dll 注入在主线程中执行代码
- 无法在 c++ 中循环后执行代码
- 执行C 代码时快速频繁的文件访问
- 执行 C++ 代码后出错
- 一个人如何从代表函数的字符串中执行运行时执行C 代码
- 是否可以在程序崩溃后执行代码?
- 第一次在 Linux 上执行 c++ 代码的时间非常慢
- 计算 JSON 中的条目数并相应地执行代码
- 将在 CATCH 块之后执行代码
- 分析执行C++代码的每一行所花费的确切时间
- 我在执行代码时不断得到"Bus Error"?
- c while()..执行代码行的条件
- 从并行线程在主 Maya 线程上执行代码
- 在调用GNUPLOT之后,如何继续执行C 代码