Инициализация объекта класса - PullRequest
0 голосов
/ 25 февраля 2019

Привет, я знаю, что это кажется очень глупым вопросом, и, честно говоря, я заблудился в том, что является причиной ошибки объекта, и мог бы действительно использовать некоторую помощь.

У меня есть 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 ++, но я понятия не имею, что я делаю неправильно.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 25 февраля 2019

Сначала удалите #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

Попробуйте онлайн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...