我正在为我的结构类开发一个小项目,并且遇到一个问题,即使TA无法弄清楚。有人建议我在这里发帖,我可能会得到一些帮助。所以这就是:
概述: 我正在使用g ++编译一个包含许多头(.h)文件及其相应实现(.cpp)文件的项目。该项目涉及3个独立的结构,并在它们之间进行时序比较。正在实现和比较的结构是二进制最小堆,左侧堆和倾斜堆。最小堆实现已完成,编译正常。但是现在我正在转向其他结构,我正在遇到我认为(我知道)编译器错误。
问题 我正在充实左派堆的存根文件,并且就编译器而言已经遇到了问题。特别是我收到的错误是:
leftHeap.cpp:15:1: error: ‘LeftistHeap’ does not name a type
代码 以下是相关代码:
leftHeap.h
#ifdef LEFTHEAP_H
#define LEFTHEAP_H
class LeftistHeap{
public:
int *root;
LeftistHeap();
~LeftistHeap();
};
#endif
leftHeap.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
的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
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 ++“没有命名类型”的问题(以及一些谷歌搜索的完整页面),但没有发现任何可能导致此问题的内容。我有这种偷偷摸摸的怀疑,这可能是我忽略的一些简单,但任何帮助将不胜感激。
谢谢!
答案 0 :(得分:7)
仔细看看你的包含守卫:#ifdef LEFTHEAP_H
。
答案 1 :(得分:2)
这只是一个错字(假设它被准确转录):
#ifdef LEFTHEAP_H
#define LEFTHEAP_H
leftHeap.h中的应为#ifndef
#ifndef LEFTHEAP_H
#define LEFTHEAP_H