添加到方法的 C++ 自定义异常会出错
c++ custom exception added to method gives error
我需要我的方法抛出自定义异常但它一直给我这个错误:
error C2059: syntax error : 'string'
正在阅读以下链接,但它不能解决我的问题:
http://msdn.microsoft.com/en-us/library/t8xe60cf%28VS.80%29.aspx
这是我的代码:
#include <exception>
#include <stdexcept>
#include <string>
#include "Log.h"
LOG_USE()
class Exception : public std::exception
{
public:
explicit Exception(std::string msg)
: message(msg)
{}
~Exception()
{}
virtual const char* what() const throw()
{
LOG_MSG(message) // write to log file
return message.c_str();
}
private:
std::string message;
};
#endif
在我的应用程序中的某个地方,我有如下所示的方法:
.....
....
void view::setDisplayView(ViewMode mode) throw(Exception("setDisplayView error"))
{
;
}
....
....
我在这里做错了什么?
我在 32 位 Windows XP 上使用 Visual Studio 2008。
您没有正确使用异常规范。该throw
,遵循setDisplayView
声明,应该只包含一个类型(在您的情况下,Exception
),而不是一个对象(这是您使用该Exception("setDisplayView error")
得到的)。
话虽如此,异常规范在 C++11 中已弃用,并且以前没有被视为有用的功能。最好省略该throw(Exception("setDisplayView error"))
.仅当您不打算抛出任何东西时才使用异常规范。在这种情况下,要使用的新语法将是 nothrow。
编辑:
要表示异常已从setDisplayView
中引发,您必须在创建异常时将该信息传递给异常 -
void view::setDisplayView(ViewMode mode)
{
if (badThingHappened())
throw Exception("setDisplayView error");
}
有各种非标准技术可以在捕获异常时找到异常的来源,您可以在此处找到一些。使用异常规范不是其中之一...
相关文章:
- C++ 中的自定义异常:在哪里定义它们?
- 我应该C++自定义异常代码放在哪里?
- 自定义异常中的用户定义的空构造函数,具有多个继承和抽象基类
- 处理许多自定义异常的最佳方法是什么
- C++未显示自定义异常消息
- 自定义异常中的消息已损坏
- 为什么要创建自己的自定义异常类
- C++ 构造函数中的自定义异常抛出 ()
- JNI自定义异常具有多个参数
- 如何在抛出未处理的自定义异常后调用 what()?
- 无法创建两个从 std::logic_error 继承的自定义异常类
- 引发异常并直接结束程序的自定义异常处理
- 在C++中创建自定义异常
- G++ 自定义异常处理程序
- 自定义异常并不总是执行 what()
- 从boost::exception和std::runtime_error继承自定义异常类
- 添加到方法的 C++ 自定义异常会出错
- 在自定义异常中仍可访问(误报?
- 自定义异常类 C++
- 未捕获从std::异常派生的C++自定义异常