未实现:C++中意外的某种ltgt_expr
unimplemented: unexpected ast of kind ltgt_expr in C++
我正在尝试构建一个由以前的学生用C++编写的程序。我使用ccmake
然后make
来构建程序。但是,在我点击make
后,我收到错误消息:
/workspace/arthur/Project/src/DirectoryName/name.cpp: In member function ‘void seed::Sweep(Datareg3&)’:
/workspace/arthur/Project/src/DirectoryName/name.cpp: sorry, unimplemented: unexpected ast of kind ltgt_expr
/workspace/arthur/Project/src/DirectoryName/name.cpp:confused by earlier errors, bailing out
make[2]: *** .. Error 1
make[1]: *** ..Error 2
错误发生在以下代码的最后一行:
此源文件的代码如下:
#define sgn(x) ((x)>0 ? 1 : ((x)<0?-1:0))
void seed::Sweep(Datareg3& reg3)
{
u_int i, j, k;
Range resp;
float min, max, t;
float gradz;
float grad1xa, grad1xb;
float grad1ya, grad1yb;
float grad2xa, grad2xb;
float grad2ya, grad2yb;
int keepflat, *keepflat_y;
keepflat_y = (int*)malloc(sizeof(int)*reg3.dim[0]);
for(k=0; k<reg3.dim[2]-1; k++)
{
..
for(j=0; j<reg3.dim[1]-1; j++)
{
keepflat = 1;
for(i=0; i<reg3.dim[0]-1; i++)
{
resp.MakeEmpty();
// top
if(i == reg3.dim[0]-2)
{
if(keepflat && keepflat_y[i])
{
// reached end at a flat.. add the edge values
min = max = reg3.getValue(i+1,j,k);
if((t=reg3.getValue(i+1,j,k+1)) < min)
{
min = t;
}
if(t > max)
{
max = t;
}
resp += Range(min,max);
}
// do we need to set keepflat_y[i]?
gradz = reg3.getValue(i,j+1,k+1) -
reg3.getValue(i,j+1,k);
grad2xa = reg3.getValue(i+1,j+1,k+1) - reg3.getValue(i,j+1,k+1);
grad2xb = reg3.getValue(i+1,j+1,k) - reg3.getValue(i,j+1,k);
grad2ya = reg3.getValue(i,j+1,k+1) - reg3.getValue(i,j,k+1);
grad2yb = reg3.getValue(i,j+1,k) - reg3.getValue(i,j,k);
keepflat_y[i] = (sgn(gradz) != 0 &&
((sgn(gradz) == -sgn(grad2xa) && sgn(gradz) == sgn(grad2ya))
||
(sgn(gradz) == -sgn(grad2xb) && sgn(gradz) == sgn(grad2yb))));
//error occurs AT THIS LINE
我以前从未见过这个错误,当我尝试在谷歌上搜索它时,我得到的结果很少。有人知道如何处理这个问题吗?
我建议你简化表达式以帮助编译器:
const int sgn_gradz = sgn(gradz);
keepflat_y[i] = (sgn_gradz != 0
&& ( (sgn_gradz == -sgn(grad2xa) && sgn_gradz == sgn(grad2ya))
|| (sgn_gradz == -sgn(grad2xb) && sgn_gradz == sgn(grad2yb))
)
);
另一个想法是使用临时bool
变量将复合表达式拆分为较小的表达式:
const bool sgn_gradz_eq_neg_sgn_grad2xa = sgn_gradz == -sgn(grad2xa);
keepflat_y[i] = (sgn_gradz != 0
&& ( sgn_gradz_eq_neg_sgn_grad2xa && sgn_gradz == sgn(grad2ya))
|| (sgn_gradz == -sgn(grad2xb) && sgn_gradz == sgn(grad2yb))
)
);
通过将复合表达式拆分为具有临时变量的较小表达式,编译器将在特定表达式而不是整行上生成错误。
要执行的另一个项目是验证 sgn
函数在此翻译单元中是否具有声明。
相关文章:
- 如何理解C++标准N3337中的expr.const.cast子句8
- expr[{ .. }] 有什么用?
- 在 z3::expr 中使用C++字符串?
- 是否可以使用"if constexpr"来声明具有不同类型和init-expr的变量
- 这是当前草案中[Expr.Ref]/(4.2)和[Expr.sub]/1之间的矛盾
- [expr.unary.op]/9 似乎暗示"运算符!()' 不能应用于下面的类型 A.但编译器不同意这一点
- 无法专用化函数模板'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)'
- 为什么这句话"The expression can be used only as the left-hand operand of a member function call"在 [expr.re
- 野牛的错误:“ yyval.yystype :: expr”没有类型
- 自定义一元/二进制Expr() eigen3 的参数
- [expr.ref]/2 中的左值到右值转换
- [expr.cond]/2 中不是缺少一些东西吗?
- 具有特征类型输出的特征二进制 Expr
- 如何避免Expr中的溢出.A B C D
- 使用带有提升/正则表达式的 Rcpp,在 eval(expr, envir, enclos) 中出错:找不到对象 'libboost_regex'
- 成员函数中的decltype(auto)忽略无效的正文,declttype(expr)失败
- int(expr)在C++中的含义是什么
- "new (expr-list) type"操作的含义和示例
- 构造函数何时调用 const-expr
- 试图理解C++14中的[expr.const]