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;
}
我只有不到 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;
}