我有一组相当复杂的嵌套结构/联合,如图所示:
typedef enum {
expr_BooleanExpr,
expr_ArithmeticExpr
} expr_type;
typedef union {
struct BooleanExpr *_bool;
struct ArithmeticExpr *_arith;
} u_expr;
typedef struct {
expr_type type;
u_expr *expr;
} Expression;
typedef struct {
Expression *lhs;
char *op;
Expression *rhs;
} BooleanExpr;
typedef struct {
Expression *lhs;
char *op;
Expression *rhs;
} ArithmeticExpr;
gcc 很高兴我在其 union 字段中创建一个包含 BoolExpression 值的 Expression 结构,如下所示:
Expression *BooleanExpr_init(Expression *lhs, char *op, Expression *rhs) {
BooleanExpr *_bool = safe_alloc(sizeof(BooleanExpr));
_bool->lhs = lhs;
_bool->op = op;
_bool->rhs = rhs;
Expression *the_exp = safe_alloc(sizeof(Expression));
the_exp->type = expr_BooleanExpr;
the_exp->expr->_bool = _bool;
return the_exp;
}
虽然它给出了一个警告:从不兼容的指针类型赋值[默认启用]为该行:the_exp->expr->_bool = _bool;
但是,当访问诸如lhs
and之类的内部表达式时rhs
,使用如下表达式
an_expr->expr->_bool->rhs
以前创建的表达式结构在哪里an_expr
,我得到了这篇文章标题中指定的错误。
我读过的大部分内容都说这是由于在需要操作符的->
地方使用了操作.
符。然而,这是不合适的,因为一切都是指针,因此需要隐式取消引用->
运算符。
有任何想法吗?