我正在为左派堆编译一些代码,我想逐步完成我的 levelorder 遍历函数。但是,每当我在“theheap.levelorder()”处到达断点并键入“step”时,gdb 都会传递代码。
我正在使用 -g 标志进行编译,并尝试了 -fno-inline 无济于事。为什么会这样?
我的makefile如下:
all:LeftistHeap.o lab10.o
g++ LeftistHeap.o lab10.o -g -o lab10
lab10.o:LeftistHeap.h
g++ -fno-inline -g -c lab10.cpp
LeftistMax.o:LeftistHeap.h LeftistHeap.cpp
g++ -fno-inline -g -c LeftistHeap.cpp
clean:
rm *.o *~ lab10
编辑: 我有两个 levelorder() 函数:一个是私有的,一个是公共的。我知道这可能是不必要的,但它不应该导致 gdb 像这样行事。
levelorder 在 .h 文件中声明如下:
public:
void levelorder();
private:
void levelorder(LNode* node);
levelorder 在 .cpp 文件中定义如下:
void LeftistHeap::levelorder()
{
levelorder(root);
}
void LeftistHeap::levelorder(LNode* node)
{
queue<LNode*> currentLevel, nextLevel;
currentLevel.push(root);
while(!currentLevel.empty())
{
LNode* temp = currentLevel.front();
currentLevel.pop();
if(temp)
{
cout << temp->key << " ";
if(temp->lchild != NULL)
nextLevel.push(temp->lchild);
if(temp->lchild != NULL)
nextLevel.push(temp->rchild);
}
if(currentLevel.empty())
{
cout << endl;
swapq(currentLevel, nextLevel);
}
}
}