express题目中只要在conditionsqlnode中增加表达式变量就报错

1 个赞

yacc_sql.y的634行使用了ConditionSqlNode的拷贝构造函数,
在ConditionSqlNode中增加的unique_ptr,其拷贝构造函数是被禁止的,
因此编译器会禁止生成ConditionSqlNode的默认拷贝构造函数,导致编译失败

请问,那怎么解决这个问题?是不是在ConditionSqlNode结构体里面不能使用unique_ptr?

想用肯定是有办法用的,
可以编写拷贝构造函数,而不是交由编译器生成,
编译器生成的默认拷贝构造函数会挨个调用对应成员的拷贝构造函数,
而unique_ptr是没有拷贝构造函数的,就会报错

我现在是用Expression *来接受解析值,请问有没有更好的办法来处理?

可以使用shared_ptr,如果要保证独占语义的会只能重写拷贝构造函数

ConditionSqlNode(const ConditionSqlNode& other){
     // right_expression同理
     left_expression = move(other.left_expression);

     // 其他成员使用 = 拷贝
     left_value = other.left_value;
     ...
}

或者不用拷贝构造函数

谢谢了,对了再问下,这个构造函数是写在结构体定义的parse_defs.h文件里面,还是写在yacc_sql.y文件里面。我是个新手,很多东西都不懂,麻烦了。

最好写在parse_defs.h

收到,谢谢。我去试下,有问题再麻烦您。