gpt4 book ai didi

c++ - 类对象初始化

转载 作者:搜寻专家 更新时间:2023-10-31 00:25:48 25 4
gpt4 key购买 nike

你好,我知道这似乎是一个非常愚蠢的问题,老实说,我不知道是什么导致了这个对象错误,我真的需要一些帮助。

我这里有这个:

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

Try online

关于c++ - 类对象初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54860807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com