EnQueue 方法在 C++ 循环队列中没有正确返回?

EnQueue method not returning correctly in C++ circular queue?

我只有不到 3 个月的编码经验,所以我开始使用 LeetCode 来积累超出学校分配的代码工作时间。

我正在尝试构建一个循环队列 (FIFO),但无法编译。我收到以下错误,我很困惑:

solution.cpp: In member function enQueue Line 58: Char 2: error: control reaches end of non-void function [-Werror=return-type] }

一件事:我被特别指示不要使用 std::queue 库,所以虽然我知道这可能会容易得多,但它不是一个选项。

我构建的完整代码如下:

class MyCircularQueue
{
private:
    int* data = nullptr;
    int size;
    int capacity;
    int front_p;
    int rear_p;

public:
    /** Initialize your data structure here. Set the size of the queue to be k. */
    MyCircularQueue(int k)
    {
        data = new int[k];
        size = 0;
        capacity = k;
        front_p = 0;
        rear_p = 0;
    }

    /** Insert an element into the circular queue. Return true if the operation is successful. */
    bool enQueue(int value)
    {
        if (!isFull() && isEmpty())
        {
            for (int i = 0; i < capacity; i++)
            {
                if (data[i] == 0)
                {
                    data[i] = value;
                    size++;
                    front_p = data[i];
                    rear_p = data[i];
                    return true;
                }
            }
        }
        else if (!isFull())
        {
            for (int i = 0; i < capacity; i++)
            {
                if (data[i] == 0)
                {
                    data[i] = value;
                    size++;
                    front_p = data[i];
                    rear_p = rear_p++;
                    return true;
                }
            }
        }
        else
        {
            return false;
        }
    }

    /** Delete an element from the circular queue. Return true if the operation is successful. */
    bool deQueue()
    {
        if (isEmpty())
        {
            return false;
        }
        else
        {
            front_p = front_p++;
            return true;
        }
    }

    /** Get the front item from the queue. */
    int Front()
    {
        return front_p;
    }

    /** Get the last item from the queue. */
    int Rear()
    {
        return rear_p;
    }

    /** Checks whether the circular queue is empty or not. */
    bool isEmpty()
    {
        for (int i = 0; i < size; i++)
        {
            if (data[i] != 0)
            {
                return false;
            }
            else
                return true;
        }
    }

    /** Checks whether the circular queue is full or not. */
    bool isFull()
    {
        if (size == capacity)
        {
            return true;
        }
        else
            return false;

    }
};

您收到该错误是因为通过 enQueue 的执行并不总是以 return 语句结束。从逻辑上讲,这可能永远不会发生,但编译器并不知道这一点,因为它发现如果 for 循环之一以 i >= capacity 终止,您将不会遇到 return 语句。

简单的解决方法是删除最后一个 else,这样 return false; 将始终在函数结束时执行。

    }
    return false;
}