【问题标题】:catch queues overflow exceptions when they occur捕获队列溢出异常时发生
【发布时间】:2021-05-25 09:27:01
【问题描述】:
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;
    }
}

【问题讨论】:

  • 你试过try(没有双关语)吗?

标签: c++ exception try-catch


【解决方案1】:

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
    }

【讨论】:

    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 2020-11-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多