You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++编译报错‘leftHeight’未在当前作用域声明问题求助

错误原因
  • 触发报错的核心原因是C++的块级作用域规则:你在if (n->left)、else代码块内部声明的leftHeight变量,仅在当前所属的代码块内有效,执行完块后变量就被销毁,因此在块外部的std::max位置无法访问到该变量。rightHeight也存在完全相同的作用域问题。
  • 额外问题:你当前main.cpp中的computeHeight是空实现,即使编译通过也无法正常计算节点高度。
解决方法
  1. 首先调整变量声明位置,将leftHeight、rightHeight提到if判断外部,保证整个函数范围内都可以访问,同时记得引入<algorithm>头文件提供std::max的实现,正确的函数代码如下:
#include <algorithm>
#include "main.h"

void computeHeight(Node *n) {
    // 可选:新增空指针判断,避免传入空指针时崩溃
    if (n == nullptr) {
        return;
    }
    int leftHeight = -1;
    int rightHeight = -1;
    if (n->left) {
        computeHeight(n->left);
        leftHeight = n->left->height;
    }
    if (n->right) {
        computeHeight(n->right);
        rightHeight = n->right->height;
    }
    n->height = std::max(leftHeight, rightHeight) + 1;
}
  1. 用上面的完整代码替换掉main.cpp中原有的空computeHeight实现即可。

内容的提问来源于stack exchange,提问作者pascalamin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:45:03