无法生成对象
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 b
。h
而不是H
您需要确保在调用时使用相同的case声明。
您当前的错误只是区分大小写的打字错误,未声明"Binaryheap b;",因为。。事实并非如此。您的类名为"BinaryHeap"(大写h!),因此有问题的对象也需要用大写h命名。
这会给您带来另一个错误。当您为BinaryHeap定义构造函数时,您立即失去了对默认构造函数的使用。这就解释了为什么"b"仍有下划线;它的声明不完整!
你可以通过两种方式解决这个问题:
- 让自己成为BinaryHeap的无参数构造函数
- 完成"b"的声明
希望这能有所帮助!祝你好运!
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 使用"std::unordereded_map"映射到"std::list"对象