c++ - 类对象初始化
问题描述
嗨,我知道这似乎是一个非常愚蠢的问题,老实说,我迷失了导致此对象错误的原因,并且真的可以使用一些帮助。
我class
这里有这个:
class PriorityQueue {
public:
PriorityQueue(std::size_t max_nodes);
void insert(Key k);
void insert(KeyValuePair kv);
KeyValuePair min();
KeyValuePair removeMin();
bool isEmpty() const;
size_t size() const;
nlohmann::json JSON() const;
private:
void heapifyUp(size_t i);
void heapifyDown(size_t i);
void removeNode(size_t i);
Key getKey(size_t i);
std::vector<KeyValuePair> nodes_;
size_t max_size_;
size_t size_;
const static size_t ROOT = 1;
}; // class PriorityQueue
#endif // _PRIORITYQUEUE_H_
一切都在相应的 cpp 文件中为它正确定义。现在我试图在一个单独的文件中调用它,其中包含两者作为标题。
#include "priorityqueue.cpp"
#include "priorityqueue.h"
但是在我的main()
函数中,当我尝试将类调用到像这样的对象时
PriorityQueue m;
我得到错误
no matching function for call to ‘PriorityQueue::PriorityQueue()’
PriorityQueue m;
我知道这似乎是一个非常基本的 C++ 问题,但我不知道我做错了什么。任何帮助将不胜感激。
解决方案
首先,删除#include "priorityqueue.cpp"
并仅使用#include "priorityqueue.h"
因为您的构造函数有一个参数:
PriorityQueue(std::size_t max_nodes);
因此,您应该max_nodes
在创建对象时进行设置:
PriorityQueue m(10);
但是您也可以使用默认参数实现默认构造函数:
在头文件中
// In this approach you can use a default constructor
// Declaration
class PriorityQueue {
public:
PriorityQueue(std::size_t max_nodes = 10);
...
};
在 cpp 文件中
// Implementation
PriorityQueue::PriorityQueue(std::size_t max_nodes)
{
max_size_ = max_nodes;
// initialize members
}
然后您可以创建如下实例:
PriorityQueue m; // max_size_ will be set to default value (10)
PriorityQueue n(7); // max_size_ will be set to 7
推荐阅读
- ios - 反应原生相机胶卷在 ios 中的 getPhotos 和 getAlbums 方法中不返回任何图像
- docker - 在 docker 中分配环境变量
- azure - 二头肌:如何连接标签
- mysql - MariaDb 在插入空 id 时抛出重复的主键错误
- css - DOM 元素在 iOS 方向更改上重叠
- c# - Asp.net 数据列表
- javascript - 如何将 .then 设置为 var?
- python - 如何阅读/理解 TF/Keras API 背后的代码?
- laravel - 在 Laravel 中选择性地缓存响应的最佳方法?
- php - Moodle用户选择器,排除以前保存的值