`
pleasetojava
  • 浏览: 729967 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

错误关联器 C++实现

 
阅读更多

-----------------------------------------------ErrorCorrelator.h----------------------------------------------#include<ostream>
#include<string>
#include<queue>
#include<stdexcept>

//error 类声明
class Error
{
public:
Error(int priority,std::string errMsg):
mPriority(priority),mError(errMsg){}


int getPriority() const {return mPriority;}


std::string getErrorString() const {return mError;}

friend bool operator<(const Error& lhs,const Error &rhs);


friend std::ostream& operator<<(std::ostream &str,const Error &err);
protected:
int mPriority;
std::string mError;
};

//error类容器,返回最高优先级的错误
class ErrorCorrelator
{
public:
ErrorCorrelator(){};

////向优先队列中添加元素
void addError(const Error& error);


//取得最优先元素
Error getError() throw (std::out_of_range);

protected:
std::priority_queue<Error> mErrors;

private:
//prevent assignment and pass-by-refernence
ErrorCorrelator(const ErrorCorrelator &src);

ErrorCorrelator & operator=(const ErrorCorrelator &rhs);

};

//比较符<重载
bool operator<(const Error& lhs,const Error &rhs)
{
return lhs.mPriority<rhs.mPriority;
}

//输出符<<重载
std::ostream& operator<<(std::ostream &str,const Error &err)
{
str << err.mError <<"(priority "<<err.mPriority<<")"<<std::endl;
return (str);
}

//向优先队列中添加元素
void ErrorCorrelator::addError(const Error &error)
{
mErrors.push(error);
}


//取得最优先元素
Error ErrorCorrelator::getError() throw(std::out_of_range)
{
//判断优先队列是否为空
if(mErrors.empty())
{
throw(std::out_of_range("No elements!"));
}
//获取对头元素
Error top = mErrors.top();
// 弹出队头元素
mErrors.pop();

return top;
}

---------------------------------------------------主函数-------------------------------------------------------

#include "stdafx.h"
#include<iostream>
#include "ErrorCorrelator.h"
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
ErrorCorrelator ec;
ec.addError(Error(3,"Unable to read file!"));
ec.addError(Error(1,"Incorrect entry from user!"));
ec.addError(Error(10,"Unable to allocate memory!"));

while(1)
{
try
{
Error e = ec.getError();
cout << e << endl;
}
catch(out_of_range&)
{
cout<<"Finished processing errors!"<<endl;
break;
}
}

system("pause");
return 0;
}

-----------------------------------------------------程序测试--------------------------------------------------Unable to allocate memory!(priority 10)

Unable to read file!(priority 3)

Incorrect entry from user!(priority 1)

Finished processing errors!
请按任意键继续. . .

分享到:
评论

相关推荐

    C++实现LL(1)语法分析器

    本文将深入探讨如何使用C++实现一个LL(1)语法分析器,包括构建First集、Follow集、判断LL(1)兼容性以及创建预测分析表。 **LL(1)解析技术概述** LL(1)解析器遵循自顶向下(Left-to-Right)的扫描方式,对输入的符号...

    c++实现的端口映射

    此外,C++端口映射程序可能还会涉及到线程管理和错误处理,以确保多并发连接的稳定性和可靠性。对于更复杂的端口映射场景,例如动态端口映射(DMZ)或UPnP(Universal Plug and Play)自动端口映射,可能还需要额外...

    香农编码之C++实现2

    在给定的文件列表中,`香农.cpp`很可能是包含C++实现的源代码文件,`香农.dsp`和`香农.dsw`是旧版Microsoft Visual Studio项目文件,用于管理和编译源代码。`香农.ncb`是Visual C++的项目工作区文件,包含关于项目和...

    C++版的fp-growth算法

    总结来说,C++实现的FP-Growth算法提供了一种高效的方式来处理大数据中的关联规则挖掘问题。理解和掌握这种算法的实现细节,不仅可以提升数据挖掘能力,还有助于在实际项目中优化数据处理流程,从而获取更有价值的...

    C++实现的模拟文件系统

    这个项目使用C++编程语言来实现,涵盖了文件管理的核心功能,包括建立文件、删除文件、读取文件以及写入文件。以下是这些功能的详细说明: 1. 建立文件:在真实的文件系统中,创建文件涉及分配磁盘空间,为文件分配...

    C++实现朴素贝叶斯分类器(加强版)

    《C++实现朴素贝叶斯分类器(加强版)》 朴素贝叶斯分类器是一种基于概率论的监督学习算法,其理论基础是贝叶斯定理和特征条件独立假设。在C++中实现朴素贝叶斯分类器,通常涉及以下几个关键知识点: 1. **贝叶斯...

    守护进程,背靠背c++实现

    首先,守护进程会关闭所有标准输入、输出和错误流,避免与任何终端关联。其次,它会改变工作目录到根目录(/),并设置 umask 为0,以确保对新创建的文件和目录的权限控制。最后,通过调用 `fork()` 两次,使得原始...

    c++实现ecc加解密算法

    7. **错误处理**:在实现过程中,应包含适当的错误处理机制,如检查用户输入的有效性,处理文件读写异常,以及加密解密过程中可能出现的错误。 在压缩包中的"ECC"文件可能是源代码、编译后的可执行文件或者是相关的...

    c++实现唯一可译码

    在C++中实现唯一可译码,我们需要理解编码的基本原理,以及如何通过编程来验证一个编码是否满足唯一可译码的条件。 唯一可译码是指一个编码系统,其中每个编码(码字)对应唯一的原始信息(消息),确保接收到的...

    C++ MFC 实现画图功能

    本项目"**C++ MFC 实现画图功能**"利用MFC库创建了一个功能丰富的画图软件,它提供了画笔、颜色选择、工具栏以及图形重绘等关键功能。下面将详细探讨这些知识点: 1. **MFC(Microsoft Foundation Classes)**:MFC...

    C++实现HTTP GET,POST请求

    C++实现GET请求通常涉及创建socket连接、构造请求头、发送数据和接收响应。以下是一段简单的示例代码: ```cpp #include #include #include #include void sendHttpGetRequest(const std::string& url) { // ...

    MFC c++ 实现简易电话簿

    **MFC C++ 实现简易电话簿** MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于简化Windows应用程序开发。本项目“MFC c++ 实现简易电话簿”是一个基于MFC框架的C++程序,旨在提供一个基本的电话...

    linux下的c++实现socket文件传输功能

    在Linux环境下,C++实现基于Socket的文件传输是一项常见的任务,尤其在分布式系统、网络编程以及服务器开发中。Socket是网络通信的一种接口,它允许进程间通过网络进行数据交换。本篇文章将深入探讨如何利用C++在...

    mfc c++实现 图书馆管理系统

    《MFC C++ 实现图书馆管理系统详解》 在信息技术飞速发展的今天,图书馆管理系统的建设已经成为提高图书馆工作效率、提升服务质量的重要手段。本文将详细介绍如何利用MFC(Microsoft Foundation Classes)库,结合...

    椭圆曲线密码(ECC)算法实现源码(C++)

    6. **错误处理和兼容性**: 实现时还需要考虑错误处理,比如检查输入的有效性,并确保与其他ECC实现的兼容性。 在压缩包里的"ecc"文件中,可能包含了实现这些功能的源代码文件。为了更好地理解和使用这些源码,你...

    公交换乘系统 C++实现

    在这个C++实现的项目中,我们将深入探讨如何构建这样的系统,涉及的主要知识点包括数据结构、算法、文件操作以及简单的用户交互。 首先,我们需要对公交线路进行建模。每条线路可以表示为一个链表,包含多个节点,...

    c++实现Socket服务器和客户端功能

    C++作为一门强大的编程语言,可以很好地实现Socket接口,构建服务器和客户端应用。在这个项目中,我们将探讨如何使用C++在Visual Studio 2008环境下实现Socket服务器和客户端的基本功能。 首先,Socket在C++中主要...

    C++实现离散数学中求集合.7z

    3. **STL中的set和unordered_set**:在C++标准库中,`std::set`是一个关联容器,它按照键值自动排序,不允许重复元素。而`std::unordered_set`是一个哈希表,提供了常数时间的插入和查找操作,但不保证元素顺序。...

    用C++实现文件操作

    对于C++这样的高级编程语言来说,文件操作主要通过标准库中的`&lt;fstream&gt;`来实现。在这个例子中,我们将会看到如何利用`ifstream`和`ofstream`这两个类来完成文件的读取和写入工作。 #### 二、文件读取(`ifstream`...

    linux_C++ tcpEpoll 的简单实现

    本教程将介绍如何使用C++在Linux环境下实现基于`epoll`的TCP服务器。 首先,我们需要理解`epoll`的工作原理。`epoll`采用了“事件”的概念,通过`epoll_create`函数创建一个`epoll`实例,然后使用`epoll_ctl`添加感...

Global site tag (gtag.js) - Google Analytics