0

我正在为左派堆编译一些代码,我想逐步完成我的 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);
    }
  }
}
4

0 回答 0