Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
异常w/QtConcurrent::Exception和boost::Exception_Boost_Exception Handling_Qt4 - Fatal编程技术网

异常w/QtConcurrent::Exception和boost::Exception

异常w/QtConcurrent::Exception和boost::Exception,boost,exception-handling,qt4,Boost,Exception Handling,Qt4,我想使用一个异常层次结构,其中基本异常类派生自boost::exception,这样我就可以获得该类必须提供的漂亮而有用的诊断信息,并使用QtConcurrent::exception,这样我就可以跨线程抛出异常 因此,我的基本异常类如下所示: class MyException : public QtConcurrent::Exception, public boost::exception { public: MyException() { }; virtual ~MyExc

我想使用一个异常层次结构,其中基本异常类派生自boost::exception,这样我就可以获得该类必须提供的漂亮而有用的诊断信息,并使用QtConcurrent::exception,这样我就可以跨线程抛出异常

因此,我的基本异常类如下所示:

class MyException : public QtConcurrent::Exception, public boost::exception
{
public:
    MyException() { };
    virtual ~MyException() throw() { }

    // required by QtConcurrent::Exception to be implemented
    virtual void raise() const { throw *this; }
    virtual MyException* clone() const { return new MyException(*this); }
};
根据QtConcurrent::Exception的文档,必须在从QtConcurrent::Exception派生的任何类中实现raise和clone。因此,我的其余代码可能如下所示:

void foo()
{
    BOOST_THROW_EXCEPTION(MyException());
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    try
    {
        foo();
    }
    catch (const MyException& me)
    {
        std::cerr << boost::diagnostic_information(me);
    }

    return 0;
}
但是,使用BOOST_THROW_EXCEPTION宏会导致以下编译错误:

错误C2555:'boost::exception\u detail::clone\u impl::clone': 重写虚拟函数的返回类型不同,并且不是协变的 来自“MyException::clone”

我不完全确定这个错误告诉我的是我的错误,不是错误,我确定

如果我改为使用throw MyException;代码编译得很好。如上所述,我希望使用BOOST\u THROW\u异常,以便在异常中获得诊断信息

我知道,一个可能的解决方法可能是另一个仅从QtConcurrent::Exception派生的类,它有一个boost::Exception成员,本质上是一个用于实际错误的容器。但是如果可能的话,我想继续让MyException类从QtConcurrent::Exception和boost::Exception继承

有人能提供一些关于错误的见解吗?有什么方法可以实现我想要的吗