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

时间:2014-03-10 22:08:08

标签: c++

以下是一些来自一个伟大网站的代码,它可以完成我想要的功能(通过寻址类对象来搜索类对象的向量)。

#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”&gt; 3崩溃时,因为对象只有3的大小。我得到了这个,但有可能在发生这种情况时得到警告,这样就不会崩溃但是我能用警告消息在代码中以某种方式纠正它吗?

1 个答案:

答案 0 :(得分:1)

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

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

别忘了设置一个全局异常处理程序(toplevel catch),否则如果异常未被捕获,你的应用程序仍会崩溃。