停止代码而不是用错误消息中断



这是一些代码,来自一个伟大的网站,它做什么我想要的相当好(在类对象的一个向量搜索寻址类对象)。

#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>

using namespacestd;
class class1
{
private:
    int id;
    double value;
public:
    class1(int i, double v) :id(i), value(v){ }
    int getId()const { return id; }
    double getValue() const { return value; }
};
class HasIdentifier :public unary_function<class1, bool>
{
public:
    HasIdentifier(int id) : m_id(id) { }
    bool operator()(const class1& c)const
    {
        return (c.getId() == m_id);
    }
private:
    int m_id;
};

class class2
{
private:
    vector <class1> objects;
public:
    class2()
    {
        objects.push_back(class1(1, 100.0));
        objects.push_back(class1(2, 100.0));
        objects.push_back(class1(3, 100.0));
    }
    double GetValueOfId(int id)
    {
        vector<class1>::iterator itElem = find_if(objects.begin(), objects.end(),  HasIdentifier(id));
        return itElem->getValue();
    }
};
int main() {
    class2 c;
    int id = 4;
    cout << id << " " << c.GetValueOfId(id);
    cin.get();
    return 0;
}

它工作得很好,但每当我输入"int id ">3时,它就崩溃了,因为对象的大小只有3。我得到了这个,但是是否有可能得到警告,当这种情况发生时,它不会崩溃,但我能够在代码中以某种方式纠正它与警告消息?

您应该检查返回的迭代器是否有效,如果无效则抛出异常(或以任何其他方式报告错误):

if (itElem == objects.end())
    throw MyVeryCoolException("Woops wrong id");

不要忘记设置一个全局异常处理程序(顶层捕获),否则如果异常未被捕获,应用程序仍然会崩溃。

相关内容

最新更新