c++ - 类对象初始化

标签 c++ oop

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

我这里有这个:

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 文件中正确定义。 现在我尝试在一个单独的文件中调用它,其中包含两者作为 header 。

#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/

相关文章:

c# - 每次按下按钮时如何在文本文件中打印新行?

c++ - 从 Linux 中的 C/C++ 程序发送电子邮件

c++ - 如何设置共享缓存

c# - 在虚方法的所有覆盖之后执行代码

c++ - 尝试初始化动态数组时未处理异常

perl - 为什么这两个版本的代码都没有通过 -c Perl 检查?

c++ - 将 COM 事件公开给 VBScript (ATL)

c++ - 具有参数化构造函数的抽象工厂

c++ - 如何查询正在运行的进程的参数列表? ( window ,C++)

c# - 根据角色限制用户可以做什么