不能引发C ++中的自身异常

肽链

我正在尝试在C ++工作(Linux,g ++)中获得自定义异常。Dictionary.hpp

#ifndef HEADER_DICTIONARY_H
#define HEADER_DICTIONARY_H

#include <map>
#include <string>
#include <stdexcept>

using namespace std;

[...]

class EDictionaryNoLabel : public runtime_error
{
public:
          explicit EDictionaryNoLabel(const string& __arg);
          virtual ~EDictionaryNoLabel() _GLIBCXX_USE_NOEXCEPT;
};

#endif

Dictionary.cpp我抛出异常(这里是编译失败的地方):

#include <map>
#include <string>
#include "Dictionary.hpp"

using namespace std;

//  map<string, string> dictMap;
Dictionary::Dictionary() {
}

void Dictionary::update(string label, string value) {
        dictMap[label]=value;
}

string Dictionary::read(string label){
        if (0==dictMap.count(label)) {
                throw( EDictionaryNoLabel("label not found") );
        }
        return dictMap[label];
}

void Dictionary::refresh() {
        dictMap.clear();
}

但是我不能编译它:

utils/Dictionary.o: In function `Dictionary::read(std::string)':
Dictionary.cpp:(.text+0xbf): undefined reference to `EDictionaryNoLabel::EDictionaryNoLabel(std::string const&)'
Dictionary.cpp:(.text+0xdc): undefined reference to `EDictionaryNoLabel::~EDictionaryNoLabel()'
Dictionary.cpp:(.text+0xe1): undefined reference to `typeinfo for EDictionaryNoLabel'
/tmp/ccXT7dWk.o:(.gcc_except_table+0x68): undefined reference to `typeinfo for EDictionaryNoLabel'
collect2: error: ld returned 1 exit status
make: *** [Test] Error 1

我完全按照标准overflow_error(也继承自runtime_error编写了异常

理查德·霍奇斯

导出自己的异常的一种非常简单有效的方法是:

struct EDictionaryNoLabel : std::runtime_error
{
    using std::runtime_error::runtime_error;
};

就是这样。

这为您提供了所有标准的构造函数和类型安全性。另外,如果需要,您可以添加其他方法。

预期:

怎么using std::runtime_error::runtime_error;办?

将基类的构造函数的名称复制到该类的名称空间中。它为您提供了所有基类的构造函数,而无需任何额外的代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我不能在方法中引发异常(Java)

来自分类Dev

在构造函数C ++中引发异常

来自分类Dev

在Python中引发未处理的C异常

来自分类Dev

如何拦截C ++中ImageMagick引发的异常?

来自分类Dev

在构造函数C ++中引发异常

来自分类Dev

在Python中引发异常

来自分类Dev

在PostgreSQL中引发异常

来自分类Dev

在C#中算术运算成功-在VB中引发异常

来自分类Dev

C Dll导入在C#中引发Marshall指令异常

来自分类Dev

WaitForExit()引发异常C#

来自分类Dev

WaitForExit()引发异常C#

来自分类Dev

C#转换引发异常

来自分类Dev

为什么我不能在Java 8 lambda表达式中引发异常?

来自分类Dev

不能为空的抽象变量可以在KOTLIN中引发Null指针异常吗?

来自分类Dev

为什么我不能在applet的处理方法中引发异常?

来自分类Dev

如何记录在C#中引发通用异常的方法?

来自分类Dev

捕获C#中从Delphi DLL引发的异常

来自分类Dev

无法通过C ++中的引用捕获引发的异常

来自分类Dev

在C#中插入数据时引发异常

来自分类Dev

C#中引发TypeCast运算符异常

来自分类Dev

为什么Python无法捕获C ++中引发的异常?

来自分类Dev

调用的目标已引发异常。在C#中

来自分类Dev

如何记录在C#中引发通用异常的方法?

来自分类Dev

整数数组在C#中引发异常

来自分类Dev

有什么办法让语句在c#中引发异常?

来自分类Dev

在 C# 中引发事件时出现空引用异常

来自分类Dev

在C ++中引发NullPointerException

来自分类Dev

在finally块中引发异常

来自分类Dev

在ActionResult方法中引发异常