0

以下に示すバイナリヒープのプログラムを作成しました

#include<iostream>
  using namespace std;

class BinaryHeap
        {

           private:
            int   currentSize;  // Number of elements in heap
            int array[];        // The heap array

            void buildHeap( );
            void percolateDown( int hole );
           public:
            bool isEmpty( ) const;
            bool isFull( ) const;
            int findmini( ) const;

            void insert( int x );
            void deleteMin( );
            void deleteMin( int minItem );
            void makeEmpty( );

   public :
      BinaryHeap( int capacity )
        {
          array[capacity + 1];
         currentSize = 0;
        }
};


 int main()
    {
         int resp, ch, choice;
         int n, i;
         Binaryheap b;
         cout << "enter the size of heap" << endl;
         cin >> n;
         BinaryHeap(n);

    return (0);
    }

コンパイル中にエラーが発生します - 'binaryheap' は、コードを書いた行でこのスコープで宣言されていませんでした BinaryHeap b;

4

5 に答える 5

4

C++ では大文字と小文字が区別されます。に変更Binaryheap b;BinaryHeap b;ます。

さらに、コンストラクターは1 つのパラメーターを受け取るため、1 つのパラメーターを指定したコンストラクター呼び出しを使用してオブジェクトを構築する必要があります。例については、 Huytard の回答を参照してください。

于 2013-06-25T15:56:42.703 に答える
1

パラメーター化されたコンストラクターのみを定義しました。これを行うと、デフォルトのコンストラクターはデフォルトで使用可能になりません。これは、オブジェクトが適切に初期化されない可能性があるケースを回避するためです。

検討、

class Dog
{
int height;

public:
Dog(int x)
{
    height = x;
}

};

この場合、すべての高さが必要Dogです。デフォルトのコンストラクターがデフォルトで提供されている場合はDog d、高さのない犬 (良くない!)を実行できます。

のデフォルト コンストラクターを定義するか、 like に;BinaryHeapを渡す場合にのみ呼び出します。intBinaryHeap(n)

あなたは を呼んでいるようですBinaryheap bhそれ以外のH

于 2013-06-25T15:59:57.647 に答える
1

コンストラクターを int で定義したので、おそらくそれを使用する予定です。

  BinaryHeap b(20);
于 2013-06-25T15:56:54.680 に答える
0

どこで呼び出す場合でも、必ず同じケース宣言を使用する必要があります。

于 2013-06-25T15:59:21.387 に答える
0

現在のエラーは、単に大文字と小文字を区別するタイプミス「Binaryheap b;」です。宣言されていないため..実際には宣言されていません。クラスの名前は「BinaryHeap」(大文字の h!) であるため、問題のオブジェクトにも大文字の h を付けて名前を付ける必要があります。

これにより、別のエラーが発生します。BinaryHeap のコンストラクターを定義すると、すぐに既定のコンストラクターを使用できなくなります。これは、"b" に下線が引かれている理由を説明しています。その宣言は不完全です!

これは、次の 2 つの方法で修正できます。

  1. BinaryHeap のパラメーターなしのコンストラクターを作成します。
  2. 「b」の宣言を完了します。

お役に立てれば!頑張ってください!

于 2013-06-25T16:25:20.753 に答える