0

私は自分の構造クラスの小さなプロジェクトに取り組んでおり、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(){
...

ここに私が使用しているメイクファイルがあります:

メイクファイル

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

さらに徹底的にするために、よりミニマリストなメイクファイルも試しました

メイクファイル (2)

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

情報過多ではないことを願っています。誰かがこれについて何かアイデアを持っているかどうか教えてください。ここで他の g++ の「タイプに名前を付けない」問題 (および Google 検索の全ページもいくつか) を見てきましたが、これを説明できるものは何も見つかりませんでした。私が見落としていた単純なものかもしれないというこっそりとした疑いがありますが、どんな助けでも大歓迎です。

ありがとう!

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 に答える