首页 > 解决方案 > 捕获队列溢出异常时发生

问题描述

void IntQueue::enqueue(int num)
    {
        if (isFull())
            throw std::runtime_error("The queue is full");
        else
        {
            // Calculate the new rear position
            rear = (rear + 1) % queueSize;
            // Insert new item
            queueArray[rear] = num;
            // Update item count
            numItems++;
        }
    }

在我抛出这个异常之后,我该如何重写主程序,以便在溢出异常发生时捕获它们。队列溢出的异常处理程序应打印适当的错误消息,然后终止程序。这是主程序

int main()
{
    IntQueue iQueue(5);

    cout << "Enqueuing 5 items...\n";
    // Enqueue 5 items.
    for (int x = 0; x < 5; x++)
        iQueue.enqueue(x);

    // Attempt to enqueue a 6th item.
    cout << "Now attempting to enqueue again...\n";
    iQueue.enqueue(5);
  
  // Deqeue and retrieve all items in the queue
    cout << "The values in the queue were:\n";
    while (!iQueue.isEmpty())
    {
        int value;
        iQueue.dequeue(value);
        cout << value << endl;
    }
}

标签: c++exceptiontry-catch

解决方案


用 包裹可以扔的部分try-block

例如,

    try
    {
        for (int x = 0; x < 5; x++)
            iQueue.enqueue(x);

        // Attempt to enqueue a 6th item.
        cout << "Now attempting to enqueue again...\n";
        iQueue.enqueue(5);
    }
    catch (const std::runtime_error& e)
    {
        cout << "Error: " << e.what() << endl; // Print error message
        exit(1); // Terminate with non-zero exit code
    }

推荐阅读