标签: throw

C++ 为什么我不能抛出抽象类?

我有一个纯虚拟类,BaseClass没有数据成员和受保护的构造函数。它的存在只是为了提供子类(模板化的)的接口。我想要在基类中实现的所有功能。对这些进行操作的函数通常会返回BaseClass&,以允许方便的操作链接。

一切都很好,直到我尝试抛出一个实例,该实例是通过函数之一的引用返回的。简而言之,我抛出了对抽象类的引用,但我确信它肯定是一个完全构造的子类实例,并且所有虚拟函数都完好无损。这就是BaseClass构造函数受到保护的原因。我正在针对 C++14 编译器进行编译。它拒绝让我抛出一个抽象类。

该类的要点之一是我可以构造一个子类,立即调用它的函数来添加信息,然后抛出它,一举完成:

throw String<72>().addInt(__LINE__).addText("mom says no"); //does not compile
Run Code Online (Sandbox Code Playgroud)

但是addText(),非常合理地,返回BaseClass&,并且编译器拒绝。

我如何能?将所有成员函数移到子类中似乎是令人厌恶的。我可以通过在抛出之前静态转换整个表达式来解决它:

throw static_cast<String<72&>( //works, ugly
   BaseClassString<72>().addText(where).addText(why).addText(resolution));
Run Code Online (Sandbox Code Playgroud)

甚至创建一个宏来隐藏丑陋的机制并确保一定的安全,但我是否遗漏了一些东西?这看起来像是 C++ 阻止了一项完全可行的技术的情况。

c++ throw

3
推荐指数
1
解决办法
223
查看次数

如何从 catch 块重新抛出抽象类错误

我需要在 catch 块内执行一些操作抛出与我得到的相同的异常

\n
#include <string>\n#include <iostream>\nclass AbstractError {\npublic:\n    virtual std::string toString() const = 0;\n};\n\nclass SomeConcreteError : public AbstractError { public:\n    std::string toString() const { return "division bt 0"; }\n};\n\nclass SomeOtherError : public AbstractError { public:\n    std::string toString() const { return "null pointer deref"; }\n};\n\nvoid foo(int i)\n{\n    if (i > 2) { throw SomeConcreteError(); }\n    else       { throw SomeOtherError();    }\n}\n\nint main(int argc, char **argv)\n{\n    try { foo(argc); }\n    catch (const AbstractError &e)\n    {\n        std::cout << e.toString() << "\\n"; …
Run Code Online (Sandbox Code Playgroud)

c++ abstract-class try-catch throw

3
推荐指数
1
解决办法
62
查看次数

之后的php异常处理设置消息

我们通常在实例化时设置消息,如下所示:

throw new Exception($msg);`
Run Code Online (Sandbox Code Playgroud)

但我处于一种情况,我有一个存储在实例变量中的默认异常对象,并在对象生命周期中使用它,如下所示:

throw $this->my_exception;
Run Code Online (Sandbox Code Playgroud)

由于我正在重用同一个对象,我需要能够在抛出异常之前随时设置消息,你知道吗?

php exception-handling exception instance-variables throw

2
推荐指数
1
解决办法
1917
查看次数

Java捕获异常和子类

你好,

在Java中如果一个方法BufferedReader.read()说它可以抛出一个IOException并且我尝试捕获一个FileNotFoundException和一个IOException两个catch块,如果该文件不存在,将输入什么catch块?

它只输入最具体的或两者兼而有之吗?

java exception-handling exception try-catch throw

2
推荐指数
1
解决办法
2040
查看次数

异常处理+多态,如果异常方法不起作用,则在同一个类中不起作用

我正在尝试这样的代码

//A.hpp
 class A{
   public:
       A() {} 
       virtual const char *message() const {return "A ERROR";}
 };

 //B.hpp

 #include "A.hpp"

 class B:public A {
   public:
       B() {}
       const char *message() const {return "B ERROR";}
 };

//main.cpp
 #include "A.hpp"
 #include "B.hpp"

void foo(const A& a) {
   /* case 1 */ throw a;   /* (or) */ /* case 2 */ throw B(); // LINE 100
}

int main() {

  B b;
  A &a(b);
  b.message(); // OUTPUT: B ERROR

  try {
      foo(a);
  } catch …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism virtual-functions exception throw

2
推荐指数
1
解决办法
1471
查看次数

可以抛出对象的构造函数抛出异常吗?

在C++中,对于要抛出的对象的构造函数是否有效会引发异常?换句话说,当我们还在构建要抛出的对象时,我们还在投掷吗?

struct Error {
  Error() {
    if (someCondition()) {
      throw anotherObject();
    }
  }
};

void test() {
  throw Error();
}
Run Code Online (Sandbox Code Playgroud)

c++ exception throw

2
推荐指数
1
解决办法
108
查看次数

是否有理由两次抛出异常?

调试生产代码我遇到了一些我以前从未见过的东西,并且我没有意识到有效的目的.在我们的一个控制器的几种方法中,我们有try-catch块.有趣的是,其中一个捕获中有2个抛出语句.

有没有理由有2个抛出语句?如果是这样,在什么情况下这是有道理的?

        try
        {
           //statements
        }
        catch (SoapException se)
        {
            //Log statement
            return null;
        }
        catch (Exception ex)
        {
            //Log statement
            throw;
            throw;
        }
Run Code Online (Sandbox Code Playgroud)

c# exception-handling try-catch throw

2
推荐指数
1
解决办法
661
查看次数

在js中捕获自定义异常

如果我有以下

function ValidationException(nr, msg){
   this.message = msg;
   this.name = "my exception";
   this.number = nr;
}
function myFunction(dayOfWeek){
   if(dayOfWeek > 7){
      throw new ValidationException(dayOfWeek, "7days only!");
   }
}
Run Code Online (Sandbox Code Playgroud)

问题是:如何在catch块中捕获此特定异常?

javascript exception-handling try-catch throw custom-exceptions

2
推荐指数
1
解决办法
1396
查看次数

找不到'ApplicationException'

我的代码的打印屏幕错误和我的参考.'ApplicationException'出错,我只是不知道如何解决它.

using System;
using System.Net;
using System.Net.Http;


namespace Sharepoint_2013_REST_API
{
   public class Program
   {
       public void Main(string[] args)
        {
            //Init
            string baseURL = "hello";
            string uriString = "world";

            System.Net.Http.HttpClient _Client = new System.Net.Http.HttpClient();
            _Client.BaseAddress = new Uri(baseURL);
            HttpResponseMessage resp = _Client.GetAsync(uriString).Result;
            string respString = resp.Content.ReadAsStringAsync().Result;
            if (resp.StatusCode != HttpStatusCode.OK)
            {
                throw new ApplicationException("BAD");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

错误通知:

错误CS0246找不到类型或命名空间名称"ApplicationException"(您是否缺少using指令或程序集引用?)25

c# throw

2
推荐指数
1
解决办法
2418
查看次数

抛出方法之外的异常 - Java

我是Java的初学者.

我声明了一个方法public void method() throws Exception,但每当我尝试通过使用在同一个类的另一个区域中调用该方法时method();,我得到一个错误:

Error: unreported exception java.lang.Exception; must be caught or declared to be thrown
Run Code Online (Sandbox Code Playgroud)

如何在不收到此错误的情况下使用该方法?

java exception throw checked-exceptions

2
推荐指数
1
解决办法
3308
查看次数