无法生成对象

Unable to make object

本文关键字:对象      更新时间:2023-10-16

我为下面给出的二进制堆编写了一个程序

#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 b;
的那一行,没有在此范围内声明"binaryheap"eroor的原因是什么?如何解决?

C++区分大小写。将Binaryheap b;更改为BinaryHeap b;

此外,您的构造函数采用一个参数,因此您需要使用带有一个参数的构造函数调用来构造对象。请参阅Huytard的回答以获取示例。

您用int定义了构造函数,所以这可能是您想要使用的。

  BinaryHeap b(20);

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

考虑一下,

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

在这种情况下,应该为每个Dog设置一个高度。如果默认情况下提供了默认构造函数,您可以执行Dog d,即没有高度的狗(不好!)

BinaryHeap定义默认构造函数,或者仅在传递int时调用它如在CCD_ 8中;

您似乎在呼叫Binaryheap bh而不是H

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

您当前的错误只是区分大小写的打字错误,未声明"Binaryheap b;",因为。。事实并非如此。您的类名为"BinaryHeap"(大写h!),因此有问题的对象也需要用大写h命名。

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

你可以通过两种方式解决这个问题:

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

希望这能有所帮助!祝你好运!