无法制作对象

时间:2013-06-25 15:55:15

标签: c++ class oop

我为二进制堆编写了一个程序,如下所示

#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;的行中声明 eroor的原因是什么以及如何解决?

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

  BinaryHeap b(20);

答案 2 :(得分:1)

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

考虑,

class Dog
{
int height;

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

};

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

定义BinaryHeap的默认构造函数或仅在传递int时调用它 比如BinaryHeap(n);

你好像打电话给Binaryheap bh代替H

答案 3 :(得分:0)

您需要确保在任何地方使用相同的案例声明。

答案 4 :(得分:0)

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

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

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

  1. 让自己成为BinaryHeap的无参数构造函数。
  2. 完成“b”的声明。
  3. 希望这有帮助!祝你好运!