首页 > 解决方案 > c++14抛出的异常类型不可复制构造

问题描述

我有一个 c++14 异常类,一个从 std::exception 继承的基本异常。我从基类中创建了派生异常,其中两个显示在下面的代码中(BadRequest 和 ServerError)。

这是我的异常类,以下代码:

#ifndef CODEDATABASE_MYEXCEPTIONS_HPP
#define CODEDATABASE_MYEXCEPTIONS_HPP

#include <string>
#include <utility>
using namespace std;

class MyException : public exception {
protected:
public:
    MyException(string error, uint32_t code, string type) :
    error_(move(error)), code_(code),type_(move(type)) {}

public:
    const std::string &getError() const {
        return error_;
    }

    uint32_t getCode() const {
        return code_;
    }

    const std::string &getType() const {
        return type_;
    }

private:
    string error_;
    uint32_t code_;
    string type_;

};

class BadRequest : public MyException {
public:
    explicit BadRequest(const string& message):
        MyException("BadRequest error: " + message, 400, "BadRequest") {

    }
};

class ServerError : public MyException {
public:
    explicit ServerError(const string& message):
            MyException("Server error: " + message, 500, "ServerError") {

    }
};

#endif //CODEDATABASE_MYEXCEPTIONS_HPP

这是我的驱动程序代码,用于测试这些异常

#include <iostream>
#include "catch.hpp"
#include "exceptions/MyExceptions.hpp"

void internal_raise(bool badrequest) {
    if (badrequest) {
        throw BadRequest("a bad request");
    } else {
        throw ServerError(" a server error");
    }
}

void raise_exception(bool badrequest) {
    try {
        internal_raise(badrequest);
    } catch (MyException& e) {
        throw e; //WARNING IS REPORTED
    }
}

TEST_CASE("work on exceptions", "[exceptions]") {

    try {
        raise_exception(true);
    } catch (MyException& e) {
        std::cout << e.getError() << std::endl;
    }

    try {
        raise_exception(false);
    } catch (MyException& e) {
        std::cout << e.getError() << std::endl;
    }
}

该代码有效,但是我收到一个我不理解的警告,我想知道如何解决它

抛出的异常类型不可复制构造。

这在“throw e”语句的 raise_exception 方法中报告。为什么我要让这个工作?避免此警告的正确方法是什么?

标签: c++c++14

解决方案


推荐阅读