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

Dart运行报错Error: Undefined name 'yas'是什么原因导致的?

Dart子类super调用父类构造函数报Undefined name 'yas'错误排查

复现代码

main() {
  CarsB cars = CarsB(lastname: 'Uysal', firstname: 'Kerem');
  print(cars.firstname);
}

class Cars {
  String firstname = '';
  String lastname = '';
  int yas = 0;
  Cars(
    this.yas, {
    this.firstname = '',
    this.lastname = '',
  });
}

class CarsB extends Cars {
  CarsB({String firstname = '', String lastname = ''})
      : super(yas, firstname: firstname, lastname: lastname);
}

报错信息

Error: Undefined name 'yas'.
main.dart:51
      : super(yas, firstname: firstname, lastname: lastname);
              ^^^
Exited (254)

错误原因

  • 父类Cars的构造函数将yas定义为必填的位置参数,没有配置默认值,所有子类调用父类构造时必须给该参数传入一个明确的int类型值。
  • 子类CarsB的构造函数初始化列表中写super(yas, ...)时,当前作用域不存在名为yas的可用变量:
    • 子类构造函数的入参只声明了firstname、lastname两个可选命名参数,没有接收yas相关入参
    • 构造初始化列表执行阶段,子类实例尚未完成初始化,无法访问从父类继承的yas属性,因此Dart解析器找不到对应标识符,直接抛出未定义名称错误。

修复方案

二选一即可:

  1. 如果子类不需要外部传入yas值,直接给父类构造的yas位置参数传固定值即可:
    class CarsB extends Cars {
      CarsB({String firstname = '', String lastname = ''})
          : super(0, firstname: firstname, lastname: lastname);
    }
    
  2. 如果需要外部创建实例时自定义yas值,就在子类构造函数中增加对应参数,再透传给父类:
    class CarsB extends Cars {
      CarsB({required int yas, String firstname = '', String lastname = ''})
          : super(yas, firstname: firstname, lastname: lastname);
    }
    
    // 调用时对应传入yas参数即可
    // CarsB cars = CarsB(yas: 25, lastname: 'Uysal', firstname: 'Kerem');
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:57:22