C++ 数组绑定错误捕获

C++ 数组绑定错误捕获,c++,arrays,error-handling,C++,Arrays,Error Handling,我有一个二进制搜索树类,我们需要用静态数组实现它。我的指导老师要求我们对插入和删除函数进行错误处理。我试图从重载的[]操作符抛出一个错误,并在插入函数中捕获它,然后将其抛出到主函数。我的BST持有正整数-1用于表示空节点 重载[]运算符 //overloaded [] operator to perform bounds checking of the array and return the value associated to the index int& BST::operato

我有一个二进制搜索树类,我们需要用静态数组实现它。我的指导老师要求我们对插入和删除函数进行错误处理。我试图从重载的[]操作符抛出一个错误,并在插入函数中捕获它,然后将其抛出到主函数。我的BST持有正整数-1用于表示空节点

重载[]运算符

//overloaded [] operator to perform bounds checking of the array and return the value associated to the index
int& BST::operator[](int i)
{
    if(i < 0 || i >= BST_SIZE)
    {
        throw out_of_range("ERROR: BST has reached maximum depth");
    }
    else
    {
        return Tree[i];
    }
}

//overloaded [] operator to perform bounds checking of the array and return the value associated to the index and also
//allows BST manipulation
const int& BST::operator[](int i) const
{
    if(i < 0 || i >= BST_SIZE)
    {
        throw out_of_range("ERROR: BST has reached maximum depth");
    }
    else
    {
        return Tree[i];
    }
}
包含代码用法的主函数段

BST myTree;
try
{
    myTree.insert(6);
    myTree.insert(2);
    myTree.insert(4);
    myTree.insert(0);
    myTree.insert(9);
    myTree.insert(3);
    myTree.insert(8);
    myTree.insert(76);
    myTree.insert(1);
    myTree.insert(5);
    myTree.insert(99);
    myTree.insert(101);
    myTree.insert(999);
    myTree.insert(11010);
    myTree.insert(6859);
    myTree.insert(9956);
    myTree.display();
}
catch(out_of_range& e)
{
    cout << e.what() << endl;
    exit(2);
}
BST-myTree;
尝试
{
myTree.insert(6);
myTree.insert(2);
myTree.insert(4);
myTree.insert(0);
myTree.insert(9);
myTree.insert(3);
myTree.insert(8);
myTree.insert(76);
myTree.insert(1);
myTree.insert(5);
myTree.insert(99);
myTree.insert(101);
myTree.insert(999);
myTree.insert(11010);
myTree.insert(6859);
myTree.insert(9956);
myTree.display();
}
渔获物(超出范围和e)
{

在你的
try
块中,我假设
Tree[loc]
没有调用你的重载操作符。你想要像
this->operator[](loc);
这样的东西。谢谢!我知道我搞砸了什么。建议——你不需要重载
[
中的
else
如果(I<0 | I>=BST\u SIZE)抛出OFE范围(“错误:BST已达到最大深度”);返回树[i];}如果您的代码有意义,可以考虑移动<代码>树和重载<代码> []/Calp>运算符到另一个类中,并使用该代码<代码> BST 。然后,您可以“自然地”对它进行索引,并捕获调用
insert
之外抛出的任何异常,就像在
main
中所做的那样。在
try
块中,我假设
树[loc]
没有调用重载运算符。您需要类似于
this->operator[](loc)的东西。谢谢!我明白我把事情搞砸了。建议——你不需要重载的
[]
中的
else
<代码>如果(i<0 | | i>=BST_大小)抛出_范围(“错误:BST已达到最大深度”);返回树[i];}如果你的代码有意义,你可以考虑移动<代码>树和重载<代码> []/Calp>运算符到另一个类中,并使用该代码<代码> BST 。然后,您可以“自然地”对它进行索引,并捕获调用
insert
之外抛出的任何异常,就像您在
main
中所做的那样。
BST myTree;
try
{
    myTree.insert(6);
    myTree.insert(2);
    myTree.insert(4);
    myTree.insert(0);
    myTree.insert(9);
    myTree.insert(3);
    myTree.insert(8);
    myTree.insert(76);
    myTree.insert(1);
    myTree.insert(5);
    myTree.insert(99);
    myTree.insert(101);
    myTree.insert(999);
    myTree.insert(11010);
    myTree.insert(6859);
    myTree.insert(9956);
    myTree.display();
}
catch(out_of_range& e)
{
    cout << e.what() << endl;
    exit(2);
}