我为二进制堆编写了一个程序,如下所示
#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的原因是什么以及如何解决?
答案 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 b
。 h
代替H
答案 3 :(得分:0)
您需要确保在任何地方使用相同的案例声明。
答案 4 :(得分:0)
您当前的错误只是一个区分大小写错误, “Binaryheap b;”没有声明,因为它实际上不是。 你的类被命名为“BinaryHeap”(大写h!),所以有问题的对象也需要以大写字母h来命名。
这会给你另一个错误。 当您为BinaryHeap定义构造函数时,您立即失去了对默认构造函数的使用。这解释了为什么“b”仍有下划线;它的声明是不完整的!
您可以通过两种方式解决此问题:
希望这有帮助!祝你好运!