私は現在、単純なBTREEを実装するが、ここで問題に遭遇しているように見えるしようとしています...私にエラーメッセージ与えエラー:削除された機能の使用?
#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
struct element
{
int x;
int y;
element (int x, int y)
{
this->x = x;
this->y = y;
}
};
int sum(element key)
{
return key.x + key.y;
}
struct node
{
element key;
node *child_left;
node *child_right;
};
class tree{
void insert(element key);
void insert(element key, node* leaf);
node* root;
tree()
{
this->root = NULL;
}
};
void tree::insert(element key){
if(this->root != NULL){
insert(key, this->root);
}else{
this->root = new node;
this->root->key.x = key.x;
this->root->key.y = key.y;
this->root->child_left = NULL;
this->root->child_right = NULL;
}
}
void tree::insert(element key, node* leaf){
if(sum(key) < sum(leaf->key)){
if(leaf->child_left != NULL){
insert(key, leaf->child_left);
}else{
leaf->child_left = new node;
leaf->child_left->key.x = key.x;
leaf->child_left->key.y = key.y;
leaf->child_left->child_left = NULL;
leaf->child_left->child_right = NULL;
}
}else if(sum(key) >= sum(leaf->key)){
if(leaf->child_right != NULL){
insert(key, leaf->child_right);
}else{
leaf->child_right = new node;
leaf->child_right->key.x = key.x;
leaf->child_right->key.y = key.y;
leaf->child_right->child_left = NULL;
leaf->child_right->child_right = NULL;
}
}
}
int main()
{
std::cout << "Somet"<< std::endl;
}
https://wandbox.org/permlink/0InxxBLt59PFVppt
:私は
Start
prog.cc: In member function 'void tree::insert(element)':
prog.cc:49:20: error: use of deleted function 'node::node()'
this->root = new node;
^~~~
prog.cc:26:8: note: 'node::node()' is implicitly deleted because the default definition would be ill-formed:
struct node
^~~~
prog.cc:26:8: error: no matching function for call to 'element::element()'
prog.cc:14:5: note: candidate: 'element::element(int, int)'
element (int x, int y)
^~~~~~~
prog.cc:14:5: note: candidate expects 2 arguments, 0 provided
prog.cc:10:8: note: candidate: 'constexpr element::element(const element&)'
struct element
^~~~~~~
prog.cc:10:8: note: candidate expects 1 argument, 0 provided
prog.cc:10:8: note: candidate: 'constexpr element::element(element&&)'
prog.cc:10:8: note: candidate expects 1 argument, 0 provided
prog.cc: In member function 'void tree::insert(element, node*)':
prog.cc:66:28: error: use of deleted function 'node::node()'
leaf->child_left = new node;
^~~~
prog.cc:76:28: error: use of deleted function 'node::node()'
leaf->child_right = new node;
^~~~
1
Finish
をなぜこれが問題を引き起こしているのかわかりません...だから、いくつかの説明は理解できます。構造体(およびクラス)自体がデフォルトのコンストラクタを持っていますか?それで、なぜそれは不平を言うのですか?
@George私は尋ねてくれて申し訳ありません。それ。 私はC++の部分で少し錆びていますが、このような単純なものは私を多く混乱させるようです。 – Loser
とにかくtobiの回答があるので、コメントを削除しました。基本的に 'element'のために存在する唯一のコンストラクタは' element :: element(int、int) 'です。もしあなたがctorを与えていなければ、C++はあなたのために' element :: element() 'をマークします。 'node'を作成すると、' element'のデフォルトctorを使って 'element'を作成しようとしています。これは存在しないので、コードは不正です。 – George