C++ 代码错误检查:遍历生成树边时条件判断出错

以下代码片段在遍历生成树的边时存在一个错误:

for (const auto& edge : result) // 遍历所有生成树的边
{
    pcl::PointXYZ p0 = cloud1->points[edge.src]; // 在点云cloud里面找到该索引对应的点值
    pcl::PointXYZ p00 = cloud1->points[edge.tgt];
    // 判断叶尖点与找到边两点是否相同,若相同则将该边加入yr点云指针,将该边加入容器yr1
    if ((point56.x == p0.x) && (point56.y == p0.y) && (point56.z == p0.z)) // 如果p0点相同表示p0为叶尖点,将两点加入yr后,再找与叶尖相连的p00点的相连点,会重复加入点
    {
        yr->push_back(p00);
        point56 = p00;
        cout << 'p00(' << p00 << ')' << endl;
    }
    else if ((point56.x == p00.x) && (point56.y == p00.y) && (point56.z == p00.z)) // 如果p00点相同,将两点加入yr后,再找p0点的
    {
        yr->push_back(p0);
        point56 = p0;
        cout << 'p0(' << p0 << ')' << endl;

    }

    bool yes = true;
    for (const auto& point9 : jie->points)
    {
        float x1 = point9.x;
        float y1 = point9.y;
        float z1 = point9.z;
        //cout << point9 << endl;
        if (x1 == point56.x && y1 == point56.y && z1 == point56.z)
        {
            std::cout << '点p与点云文件内的点相同' << std::endl;
            yes = false;
            break; // 停止比较
        }
    }
    if (yes = false) // 错误所在
    {
        cout << '触发' << endl;
        break;
    }

}

错误分析

代码中的错误在于 if (yes = false)。这里使用了赋值运算符 = 而不是比较运算符 ==

  • = 是赋值运算符,会将右侧的值赋给左侧的变量。
  • == 是比较运算符,用于判断两个值是否相等。

在上述代码中,我们需要判断 yes 是否为 false,因此应该使用比较运算符 ==

正确写法

以下是两种正确的写法:

  1. 使用比较运算符 ==:
if (yes == false)
  1. 使用逻辑非运算符 !:
if (!yes)

总结

在编写代码时,要注意区分赋值运算符和比较运算符。错误地使用运算符会导致程序逻辑错误,难以排查。建议在编写代码时,仔细检查条件判断语句,确保使用了正确的运算符。

C++ 代码错误检查:遍历生成树边时条件判断出错

原文地址: https://www.cveoy.top/t/topic/fAI5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录