首页 > 解决方案 > 类对象初始化

问题描述

嗨,我知道这似乎是一个非常愚蠢的问题,老实说,我迷失了导致此对象错误的原因,并且真的可以使用一些帮助。

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++ 问题,但我不知道我做错了什么。任何帮助将不胜感激。

标签: c++oop

解决方案


首先,删除#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

在线尝试


推荐阅读