gpt4 book ai didi

c++ - 在 QT 中创建我自己的异常并在函数中抛出异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:39 25 4
gpt4 key购买 nike

我正在尝试在 Qt 中创建自己的异常类。这是我第一次这样做,我很困惑如何将我的豁免扔到 main 中调用的函数中。

我目前拥有的:

myExcption.h

#ifndef MYEXCEPTION_H
#define MYEXCEPTION_H

#include <qtconcurrentexception.h>
#include <QDebug>

class MyException: public QtConcurrent::Exception
{
public:
void raise() const {qDebug() << "\nException: "; throw *this;}
};

#endif // MYEXCEPTION_H

现在我如何抛出豁免是这样的:

myFuction.h

void Commands(QString Command_in, MyException &wrongInput);

myFunction.cpp

void Command(QString Command_in, MyException &wrongInput)
{
if(Command_in != "some string")
{
wrongInput.raise();
}
}

main.cpp

String s = "some String";
MyException wrongString;
try
{
Command(s, wrongString);
}
catch(MyException &wrongString)
{
qDebut << "String invalid";
}

现在这可行了,但我觉得好像我不应该将异常的引用传递给每个函数。我有哪些选择?这是我觉得我应该能够做到的,但我不确定如何去做。

myFunction.cpp

void Command(QString Command_in)
{
if(Command_in != "some string")
{
throw myException;
}
}

main.cpp

QString s = "some String";
try
{
Command(s);
}
catch(MyException &wrongString)
{
qDebut << "String invalid";
}

这可能吗?

最佳答案

你快到了。在 throw 语句中,您通常会抛出一个异常类的临时对象。例如。

void Command(QString Command_in)
{
if(Command_in != "some string")
{
throw MyException{};
}
}

从技术上讲,命名对象并没有错,但是它长了一行并且可读性不佳:

void Command(QString Command_in)
{
if(Command_in != "some string")
{
MyException someRandomName;
throw someRandomName;
}
}

当然,这意味着您也不需要 raise() 方法。但如果你想要一个,它真的应该是 static :

class MyException: public QtConcurrent::Exception
{
public:
static void raise() const {qDebug() << "\nException: "; throw MyException{};}
};

关于c++ - 在 QT 中创建我自己的异常并在函数中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22079861/

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