我正在尝试为能够存储类对象的二叉搜索树创建一个节点。这是我到目前为止:
struct person
{
string name;
int age;
person(string, int);
};
struct node
{
person p;
node* left;
node* right;
};
Run Code Online (Sandbox Code Playgroud)
当我尝试在 main 中声明一个节点时,例如:
int main(){
node* root1 = new node();
root1->p("bob", 25);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:调用隐式删除的“节点”和类型“人”的默认构造函数不提供调用运算符
有人可以指出我做错了什么吗?我以为通过在main中构造带参数的对象会自动调用person类的构造函数?
当您创建root1,p被构造时,您不能在现有对象上调用构造函数,因此编译器认为您正在执行函数调用。相反,你可以这样做:
root1->p = person{"bob", 25};
Run Code Online (Sandbox Code Playgroud)
此外,这一行:
node* root1 = new node();
Run Code Online (Sandbox Code Playgroud)
不会编译,因为没有默认构造函数person。
你可以这样称呼它:
node* root1 = new node{{"bob", 25}};
Run Code Online (Sandbox Code Playgroud)
或者恢复 , 的默认构造函数person:
person() = default;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |