#c #oop #inheritance
#c #ооп #наследование
Вопрос:
Я пишу файл класса для двоичного дерева поиска (по британскому летнему времени), который простирается от класса (дерево). Тем не менее, я получаю следующую ошибку в моей IDE для текущего файла ( bst.cpp
)
для класса «Дерево» не существует конструктора по умолчанию
При компиляции я получаю следующую ошибку:
нет соответствующей функции для вызова ‘Tree::Tree()’
Это кажется странным, учитывая, что я уже определил конструктор по умолчанию в своей реализации класса дерева и импортировал класс в свой bst.cpp
файл:
// Import dependencies
#include "datastructure.hpp"
#include "tree.cpp"
// Import libraries
#include <fstream>
#include <sstream>
using namespace std;
BST::BST() {
}
void BST::solution(const char *input_path, const char *output_path)
{
}
Ниже datastructure.hpp
:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
typedef struct TreeNode {
int key;
int val;
bool flag;
int num_children;
TreeNode **children;
} TreeNode;
class Tree {
protected:
TreeNode* root;
int max_width;
public:
Tree(int width);
static void solution(const char *input_path, const char *output_path);
};
class BST: public Tree {
protected:
int max_width = 2;
public:
BST();
static void solution(const char *input_path, const char *output_path);
};
И, наконец, ниже приведен мой tree.cpp
:
#include "datastructure.hpp"
#include <fstream>
#include <sstream>
#include <queue>
using namespace std;
Tree::Tree(int width) {
max_width = width;
}
void Tree::solution(const char *input_path, const char *output_path)
{
}
Комментарии:
1. Как указано,
Tree
не имеет конструктора по умолчанию. Либо предоставьте его, либо выполнитеBST()
вызовTree(int)
. Конструктор по умолчанию не создается автоматически, если вы его определяете.2. @karastojko как бы я перевожу оформление по британскому летнему времени (), вызываемой из дерева(инт) в синтаксисе?
3. При звонке по британскому летнему времени(), он автоматически вызывает конструктор базового как дерево (), который не существует.
4.
#include "tree.cpp"
Это опечатка для#include "tree.hpp"
?
Ответ №1:
Вы получили его там, Tree
у него нет конструктора по умолчанию. В результате этого вы не можете сконструировать a по умолчанию BST
, потому Tree
что то, что находится внутри него, не будет знать, как построить себя.
Вы должны инициализировать его с помощью члена.
BST::BST() : Tree(1) {}
Вы уверены, что не хотите передавать это значение конструктору BST
though ?
BST::BST(int w) : Tree(w) {}