gpt4 book ai didi

添加到方法的 c++ 自定义异常给出错误

转载 作者:行者123 更新时间:2023-11-30 02:03:55 28 4
gpt4 key购买 nike

我需要我的方法来抛出自定义异常但它一直给我这个错误:
错误 C2059:语法错误:'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。

最佳答案

您没有正确使用异常规范。在 setDisplayView 声明之后的那个 throw 应该只包含一个类型(在你的例子中,Exception),而不是一个对象(这是你得到的是 Exception("setDisplayView error")).

现在,话虽如此,异常规范在 C++11 中已被弃用,并且之前未被视为有用的功能。最好省略 throw(Exception("setDisplayView error"))。仅当您不打算抛出任何东西时才使用异常规范。在这种情况下,要使用的新语法将是 nothrow .

编辑:

要表示异常已从 setDisplayView 中抛出,您必须在创建异常时将该信息传递给异常 -

void view::setDisplayView(ViewMode mode)
{
if (badThingHappened())
throw Exception("setDisplayView error");
}

有各种非标准技术可以在捕获异常时找到异常的来源,你可以找到一些here .使用异常规范不是其中之一......

关于添加到方法的 c++ 自定义异常给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11288533/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com