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;

此外,您的构造函数采用一个参数,因此您需要使用带有一个参数的构造函数调用来构造对象。有关示例,请参见Huytard 的答案

于 2013-06-25T15:56:42.703 回答
1

您只定义了一个参数化构造函数。执行此操作时,默认构造函数默认不可用。这是为了避免可能导致对象未正确初始化的情况。

考虑,

class Dog
{
int height;

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

};

在这种情况下,您应该为每个Dog. 如果默认情况下提供了默认构造函数,您可以执行Dog d即 A Dog with no height (Not Good!)

要么定义一个默认构造函数,BinaryHeap要么只在你传递一个int like in时调用它BinaryHeap(n)

你似乎在打电话Binaryheap bh代替H

于 2013-06-25T15:59:57.647 回答
1

您使用 int 定义了构造函数,这就是您可能打算使用的。

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

您需要确保在调用时使用相同的 case 声明。

于 2013-06-25T15:59:21.387 回答
0

您当前的错误只是区分大小写的错字,“Binaryheap b;” 没有声明,因为..它实际上不是。你的类被命名为“BinaryHeap”(大写 h!),所以有问题的对象也需要用大写 h 命名。

这给了你另一个错误。当您为 BinaryHeap 定义构造函数时,您立即失去了对默认构造函数的使用。这就解释了为什么“b”仍然带有下划线;它的声明不完整!

您可以通过两种方式解决此问题:

  1. 让自己成为 BinaryHeap 的无参数构造函数。
  2. 完成“b”的声明。

希望这可以帮助!祝你好运!

于 2013-06-25T16:25:20.753 回答