添加到方法的 C++ 自定义异常会出错

c++ custom exception added to method gives error

本文关键字:自定义异常 出错 C++ 方法 添加      更新时间:2023-10-16

我需要我的方法抛出自定义异常但它一直给我这个错误:
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");
}

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