0

我正在为我的结构课做一个小项目,并且遇到了一个问题,即使 TA 也无法弄清楚。有人建议我在这里发布它,我可能会得到一些帮助。所以这里是:

概述: 我正在使用 g++ 编译一个项目,该项目包含许多头文件 (.h) 及其相应的实现 (.cpp) 文件。该项目涉及 3 个独立的结构,并在它们之间进行时间比较。正在实现和比较的结构是二进制最小堆、左堆和倾斜堆。最小堆实现已完成,并且正在编译。然而,现在我正在转向其他结构,我遇到了我假设(我知道)是编译器错误。

问题 我正在充实左派堆的存根文件,并且就编译器而言已经碰壁了。特别是我收到一个错误,内容如下:

leftHeap.cpp:15:1: error: ‘LeftistHeap’ does not name a type

代码 下面看一下相关代码:

左堆.h

#ifdef LEFTHEAP_H
#define LEFTHEAP_H

class LeftistHeap{

 public:
  int *root;
  LeftistHeap();
  ~LeftistHeap();
};

#endif

左堆.cpp

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <stdio.h>
#include <math.h>
#include "leftHeap.h"
using namespace std;

//Constuctor
LeftistHeap::LeftistHeap(){

 root = NULL;
}

包含 leftHeap.h 的唯一其他地方是 main.cpp

主文件

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <stdio.h>
#include <math.h>
#include "minHeap.h"
#include "leftHeap.h"
#include "skewHeap.h"
using namespace std;


int main(){
...

这是我正在使用的makefile:

生成文件

all: lab10

lab10: comparison.o minHeap.o leftHeap.o skewHeap.o
        g++ comparison.o minHeap.o leftHeap.o skewHeap.o -o lab10

comparison.o: comparison.cpp
    g++ -c comparison.cpp

minHeap.o: minHeap.h minHeap.cpp
    g++ -c minHeap.h minHeap.cpp

leftHeap.o: leftHeap.h leftHeap.cpp
    g++ -c leftHeap.h leftHeap.cpp

skewHeap.o: skewHeap.h skewHeap.cpp
    g++ -c skewHeap.h skewHeap.cpp

clean:
    rm lab10 *.o

为了更加彻底,我还尝试了一个更简约的 makefile

生成文件 (2)

test:
    g++ minHeap.h leftHeap.h skewHeap.h comparison.cpp minHeap.cpp leftHeap.cpp skewHeap.cpp -o lab10
clean:
        rm lab10 *.o

我希望这不是信息过载。如果有人对此有任何想法,请告诉我。我已经查看了此处的其他 g++“未命名类型”问题(以及一些完整的谷歌搜索页面),但没有发现任何可能导致此问题的原因。我有这种偷偷摸摸的怀疑,这可能是我忽略的一些简单的事情,但任何帮助将不胜感激。

谢谢!

4

2 回答 2

7

仔细看看你的包含警卫:#ifdef LEFTHEAP_H

于 2013-04-09T18:43:27.057 回答
2

这只是一个错字(假设它被准确转录):

#ifdef LEFTHEAP_H
#define LEFTHEAP_H

在 leftHeap.h 中应该是 #ifndef

#ifndef LEFTHEAP_H
#define LEFTHEAP_H
于 2013-04-09T18:44:17.867 回答