<think>根据错误信息,问题在于尝试访问一个不存在的对象成员“姓名”。在易语言中,这通常是因为没有正确定义该对象(或自定义数据类型)的成员。
解决方案:
1. 确保已经定义了包含这些成员的自定义数据类型(如“角色”类型)。
2. 在使用该类型之前,先声明一个该类型的变量(如“角色”变量)。
3. 然后通过该变量访问其成员(如“角色.姓名”)。
以下是如何定义角色数据类型并正确使用的示例代码:</think>### 解决"找不到指定的对象成员名称'姓名'"错误
在易语言中,当出现"找不到指定的对象成员名称'姓名'"错误时,通常是因为未正确定义自定义数据类型或未正确初始化变量。以下是完整的解决方案:
```easy
.版本 2
; 解决方案1:正确定义自定义数据类型
.数据类型 角色类型
.成员 姓名, 文本型
.成员 境界, 文本型
.成员 修为, 整数型
.成员 气血, 整数型
.成员 真气, 整数型
.成员 攻击, 整数型
.成员 防御, 整数型
.成员 功法, 文本型, , "3" ; 定义3个元素的功法数组
.成员 法宝, 文本型, , "5" ; 定义5个元素的法宝数组
.成员 灵石, 整数型
; 解决方案2:正确初始化角色变量
.程序集 游戏核心
.程序集变量 角色, 角色类型 ; 声明角色变量
.子程序 初始化角色
; 正确设置角色属性
角色.姓名 = "修真者"
角色.境界 = "练气期"
角色.修为 = 0
角色.气血 = 100
角色.真气 = 100
角色.攻击 = 20
角色.防御 = 10
; 初始化功法数组
角色.功法[1] = "基础吐纳"
角色.功法[2] = ""
角色.功法[3] = ""
; 初始化法宝数组
角色.法宝[1] = "木剑"
角色.法宝[2] = ""
角色.法宝[3] = ""
角色.法宝[4] = ""
角色.法宝[5] = ""
角色.灵石 = 100
; 解决方案3:使用数组函数操作列表
.子程序 添加功法
.参数 功法名称, 文本型
.局部变量 i, 整数型
; 查找空位添加功法
.计次循环首 (取数组成员数(角色.功法), i)
.如果真 (角色.功法[i] == "")
角色.功法[i] = 功法名称
返回
.如果真结束
.计次循环尾()
; 如果没有空位,扩展数组
.局部变量 新大小, 整数型
新大小 = 取数组成员数(角色.功法) + 1
重定义数组(角色.功法, 假, 新大小)
角色.功法[新大小] = 功法名称
.子程序 添加法宝
.参数 法宝名称, 文本型
.局部变量 i, 整数型
; 查找空位添加法宝
.计次循环首 (取数组成员数(角色.法宝), i)
.如果真 (角色.法宝[i] == "")
角色.法宝[i] = 法宝名称
返回
.如果真结束
.计次循环尾()
; 如果没有空位,扩展数组
.局部变量 新大小, 整数型
新大小 = 取数组成员数(角色.法宝) + 1
重定义数组(角色.法宝, 假, 新大小)
角色.法宝[新大小] = 法宝名称
```
### 列表操作完整实现
```easy
.版本 2
; === 角色管理系统 ===
.数据类型 角色类型
.成员 姓名, 文本型
.成员 境界, 文本型
.成员 修为, 整数型
.成员 气血, 整数型
.成员 真气, 整数型
.成员 攻击, 整数型
.成员 防御, 整数型
.成员 功法, 文本型, , "0" ; 动态数组
.成员 法宝, 文本型, , "0" ; 动态数组
.成员 灵石, 整数型
.程序集 角色管理器
.程序集变量 角色列表, 角色类型, , "0" ; 角色列表
; === 初始化角色 ===
.子程序 创建角色
.参数 姓名, 文本型
.局部变量 新角色, 角色类型
新角色.姓名 = 姓名
新角色.境界 = "练气期"
新角色.修为 = 0
新角色.气血 = 100
新角色.真气 = 100
新角色.攻击 = 20
新角色.防御 = 10
新角色.灵石 = 100
; 初始化空数组
重定义数组(新角色.功法, 假, 0)
重定义数组(新角色.法宝, 假, 0)
加入成员(角色列表, 新角色)
返回 取数组成员数(角色列表) ; 返回角色ID
; === 功法管理 ===
.子程序 添加功法
.参数 角色ID, 整数型
.参数 功法名称, 文本型
.如果真 (角色ID > 0 且 角色ID <= 取数组成员数(角色列表))
加入成员(角色列表[角色ID].功法, 功法名称)
.如果真结束
.子程序 移除功法
.参数 角色ID, 整数型
.参数 功法名称, 文本型
.局部变量 i, 整数型
.如果真 (角色ID > 0 且 角色ID <= 取数组成员数(角色列表))
.计次循环首 (取数组成员数(角色列表[角色ID].功法), i)
.如果真 (角色列表[角色ID].功法[i] == 功法名称)
删除成员(角色列表[角色ID].功法, i, 1)
返回
.如果真结束
.计次循环尾()
.如果真结束
.子程序 获取功法列表, 文本型, , "0"
.参数 角色ID, 整数型
.如果真 (角色ID > 0 且 角色ID <= 取数组成员数(角色列表))
返回 角色列表[角色ID].功法
.如果真结束
返回 {} ; 返回空数组
; === 法宝管理 ===
.子程序 添加法宝
.参数 角色ID, 整数型
.参数 法宝名称, 文本型
.如果真 (角色ID > 0 且 角色ID <= 取数组成员数(角色列表))
加入成员(角色列表[角色ID].法宝, 法宝名称)
.如果真结束
.子程序 移除法宝
.参数 角色ID, 整数型
.参数 法宝名称, 文本型
.局部变量 i, 整数型
.如果真 (角色ID > 0 且 角色ID <= 取数组成员数(角色列表))
.计次循环首 (取数组成员数(角色列表[角色ID].法宝), i)
.如果真 (角色列表[角色ID].法宝[i] == 法宝名称)
删除成员(角色列表[角色ID].法宝, i, 1)
返回
.如果真结束
.计次循环尾()
.如果真结束
.子程序 获取法宝列表, 文本型, , "0"
.参数 角色ID, 整数型
.如果真 (角色ID > 0 且 角色ID <= 取数组成员数(角色列表))
返回 角色列表[角色ID].法宝
.如果真结束
返回 {} ; 返回空数组
; === 角色信息显示 ===
.子程序 显示角色信息
.参数 角色ID, 整数型
.局部变量 信息, 文本型
.如果真 (角色ID > 0 且 角色ID <= 取数组成员数(角色列表))
.局部变量 角色 = 角色列表[角色ID]
信息 = "===== 角色信息 =====" + #换行符
信息 = 信息 + "姓名:" + 角色.姓名 + #换行符
信息 = 信息 + "境界:" + 角色.境界 + #换行符
信息 = 信息 + "修为:" + 到文本(角色.修为) + #换行符
信息 = 信息 + "气血:" + 到文本(角色.气血) + #换行符
信息 = 信息 + "真气:" + 到文本(角色.真气) + #换行符
信息 = 信息 + "攻击:" + 到文本(角色.攻击) + #换行符
信息 = 信息 + "防御:" + 到文本(角色.防御) + #换行符
信息 = 信息 + "灵石:" + 到文本(角色.灵石) + #换行符
; 显示功法列表
信息 = 信息 + #换行符 + "功法列表:" + #换行符
.计次循环首 (取数组成员数(角色.功法), i)
信息 = 信息 + " " + 到文本(i) + ". " + 角色.功法[i] + #换行符
.计次循环尾()
; 显示法宝列表
信息 = 信息 + #换行符 + "法宝列表:" + #换行符
.计次循环首 (取数组成员数(角色.法宝), i)
信息 = 信息 + " " + 到文本(i) + ". " + 角色.法宝[i] + #换行符
.计次循环尾()
信息框(信息, 0, "角色信息", )
.如果真结束
```
### 在编辑框中显示列表的完整示例
```easy
.版本 2
.支持库 iext
; === 界面设计 ===
.程序集 窗口程序集_主窗口
.程序集变量 角色, 角色类型 ; 使用之前定义的"角色类型"
; 窗口组件:
; 编辑框_角色信息
; 列表框_功法列表
; 列表框_法宝列表
; 按钮_添加功法
; 按钮_添加法宝
.子程序 __启动窗口_创建完毕
初始化角色()
刷新界面()
.子程序 初始化角色
角色.姓名 = "修真者"
角色.境界 = "练气期"
角色.修为 = 0
角色.气血 = 100
角色.真气 = 100
角色.攻击 = 20
角色.防御 = 10
; 初始化功法数组
重定义数组(角色.功法, 假, 3)
角色.功法[1] = "基础吐纳"
角色.功法[2] = ""
角色.功法[3] = ""
; 初始化法宝数组
重定义数组(角色.法宝, 假, 5)
角色.法宝[1] = "木剑"
角色.法宝[2] = ""
角色.法宝[3] = ""
角色.法宝[4] = ""
角色.法宝[5] = ""
角色.灵石 = 100
.子程序 刷新界面
; 显示角色基本信息
.局部变量 信息, 文本型
信息 = "姓名:" + 角色.姓名 + #换行符
信息 = 信息 + "境界:" + 角色.境界 + #换行符
信息 = 信息 + "修为:" + 到文本(角色.修为) + #换行符
信息 = 信息 + "气血:" + 到文本(角色.气血) + #换行符
信息 = 信息 + "真气:" + 到文本(角色.真气) + #换行符
信息 = 信息 + "攻击:" + 到文本(角色.攻击) + #换行符
信息 = 信息 + "防御:" + 到文本(角色.防御) + #换行符
信息 = 信息 + "灵石:" + 到文本(角色.灵石) + #换行符
编辑框_角色信息.内容 = 信息
; 刷新功法列表框
列表框_功法列表.清空()
.计次循环首 (取数组成员数(角色.功法), i)
.如果真 (角色.功法[i] != "")
列表框_功法列表.加入项目(角色.功法[i], )
.如果真结束
.计次循环尾()
; 刷新法宝列表框
列表框_法宝列表.清空()
.计次循环首 (取数组成员数(角色.法宝), i)
.如果真 (角色.法宝[i] != "")
列表框_法宝列表.加入项目(角色.法宝[i], )
.如果真结束
.计次循环尾()
.子程序 _按钮_添加功法_被单击
.局部变量 功法名, 文本型
功法名 = 输入框("请输入功法名称:", "添加功法", "")
.如果真 (功法名 != "")
; 添加到角色功法数组
.局部变量 i, 整数型
.计次循环首 (取数组成员数(角色.功法), i)
.如果真 (角色.功法[i] == "")
角色.功法[i] = 功法名
刷新界面()
返回
.如果真结束
.计次循环尾()
; 如果没有空位,扩展数组
.局部变量 新大小, 整数型
新大小 = 取数组成员数(角色.功法) + 1
重定义数组(角色.功法, 假, 新大小)
角色.功法[新大小] = 功法名
刷新界面()
.如果真结束
.子程序 _按钮_添加法宝_被单击
.局部变量 法宝名, 文本型
法宝名 = 输入框("请输入法宝名称:", "添加法宝", "")
.如果真 (法宝名 != "")
; 添加到角色法宝数组
.局部变量 i, 整数型
.计次循环首 (取数组成员数(角色.法宝), i)
.如果真 (角色.法宝[i] == "")
角色.法宝[i] = 法宝名
刷新界面()
返回
.如果真结束
.计次循环尾()
; 如果没有空位,扩展数组
.局部变量 新大小, 整数型
新大小 = 取数组成员数(角色.法宝) + 1
重定义数组(角色.法宝, 假, 新大小)
角色.法宝[新大小] = 法宝名
刷新界面()
.如果真结束
.子程序 _列表框_功法列表_列表项被选择
.局部变量 索引, 整数型
索引 = 列表框_功法列表.现行选中项 + 1
.如果真 (索引 > 0 且 索引 <= 取数组成员数(角色.功法))
.局部变量 功法名 = 角色.功法[索引]
信息框("已选择功法:" + 功法名, 0, "功法信息", )
.如果真结束
.子程序 _列表框_法宝列表_列表项被选择
.局部变量 索引, 整数型
索引 = 列表框_法宝列表.现行选中项 + 1
.如果真 (索引 > 0 且 索引 <= 取数组成员数(角色.法宝))
.局部变量 法宝名 = 角色.法宝[索引]
信息框("已选择法宝:" + 法宝名, 0, "法宝信息", )
.如果真结束
```
### 高级列表管理技巧
1. **使用列表类封装操作**
```easy
.程序集类 功法列表类
.成员变量 功法数组, 文本型, , "0"
.子程序 添加功法, , 公开
.参数 功法名, 文本型
加入成员(功法数组, 功法名)
.子程序 移除功法, , 公开
.参数 索引, 整数型
.如果真 (索引 > 0 且 索引 <= 取数组成员数(功法数组))
删除成员(功法数组, 索引, 1)
.如果真结束
.子程序 获取功法列表, 文本型, , "0", 公开
返回 功法数组
.子程序 功法数量, 整数型, 公开
返回 取数组成员数(功法数组)
; 在角色类型中使用
.数据类型 角色类型
.成员 功法列表, 功法列表类
```
2. **带过滤功能的列表**
```easy
.子程序 获取有效功法, 文本型, , "0"
.局部变量 结果, 文本型, , "0"
.局部变量 i, 整数型
.计次循环首 (取数组成员数(角色.功法), i)
.如果真 (角色.功法[i] != "")
加入成员(结果, 角色.功法[i])
.如果真结束
.计次循环尾()
返回 结果
```
3. **列表排序功能**
```easy
.子程序 功法排序
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 临时, 文本型
.局部变量 数量 = 取数组成员数(角色.功法)
.计次循环首 (数量 - 1, i)
.计次循环首 (数量 - i, j)
.如果真 (角色.功法[j] > 角色.功法[j + 1])
临时 = 角色.功法[j]
角色.功法[j] = 角色.功法[j + 1]
角色.功法[j + 1] = 临时
.如果真结束
.计次循环尾()
.计次循环尾()
```