C++ 代码错误检查:遍历生成树边时条件判断出错
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,因此应该使用比较运算符 ==。
正确写法
以下是两种正确的写法:
- 使用比较运算符
==:
if (yes == false)
- 使用逻辑非运算符
!:
if (!yes)
总结
在编写代码时,要注意区分赋值运算符和比较运算符。错误地使用运算符会导致程序逻辑错误,难以排查。建议在编写代码时,仔细检查条件判断语句,确保使用了正确的运算符。
原文地址: https://www.cveoy.top/t/topic/fAI5 著作权归作者所有。请勿转载和采集!