assert error : cctouchdispatcher forceaddhandler line 121 || android

标题比较2,忘记全称了
主要是碰到场景切换的时候,vs模拟没有问题,到android上去,切换场景会报错:在forceaddhandler中的121行,
找了几天,偶然从http://www.th7.cn/Program/IOS/2012/05/17/75881.shtml,这个页面发现了答案。

一般做touch的时候会先在init中settouchenable(true),那么在切换的时候,如果不是menuselector的切换,通常都需要先
设置this->settouchenable(false),否则会报错。
源码地址: https://pan.quark.cn/s/a4b39357ea24 欧姆龙触摸屏编程软件MPTST 5.02是专门为欧姆龙品牌的工业触摸屏而研发的编程解决方案,它赋予用户在直观界面上构建、修改以及排错触摸屏应用程序的能力。 该软件在工业自动化领域具有不可替代的地位,特别是在生产线监视、设备操控以及人机互动系统中发挥着核心作用。 欧姆龙MPTST(Machine Process Terminal Software Touch)5.02版本配备了多样化的功能,旨在应对不同种类的触摸屏项目要求。 以下列举了若干核心特性:1. **图形化编程**:MPTST 5.02采用图形化的编程模式,允许用户借助拖拽动作来设计屏幕布局,设定按钮、滑块、指示灯等组件,显著简化了编程流程,并提升了工作效率。 2. **兼容性**:该软件能够适配欧姆龙的多个触摸屏产品线,包括CX-One、NS系列、NJ/NX系列等,使用户可以在同一个平台上完成对不同硬件的编程任务。 3. **数据通信**:MPTST 5.02具备与PLC(可编程逻辑控制器)进行数据交互的能力,通过将触摸屏作为操作界面,实现生产数据的显示与输入,以及设备状态的监控。 4. **报警与事件管理**:软件中集成了报警和事件管理机制,可以设定多种报警标准,一旦达到预设条件,触摸屏便会展示对应的报警提示,助力操作人员迅速做出响应。 5. **模拟测试**:在设备实际连接之前,MPTST 5.02支持用户进行脱机模拟测试,以此验证程序的正确性与稳定性。 6. **项目备份与恢复**:为了防止数据遗失,MPTST 5.02提供了项目文件的备份及还原功能,对于多版本控制与团队协作具有显著价值。 7. **多语言支持**:针对全球化的应...
<think>好的,我现在需要解决用户提出的TypeError问题,具体是函数调用时传递了2个参数但只期望1个,特别是在Solidity和Truffle环境中。首先,我应该回忆Solidity函数调用的基本机制。Solidity是静态类型语言,函数参数必须严格匹配。如果用户遇到参数数量错误,最常见的原因是调用函数时传入的参数数量与函数定义时的参数数量不一致。 接下来,我需要考虑可能的场景。例如,用户可能在智能合约中定义了一个函数,比如function assert(uint condition) public,但在调用时传入了两个参数,导致错误。这时候,错误信息会明确指出参数数量不正确。 然后,解决方案部分需要分步骤。首先,检查函数定义和调用的参数数量是否一致。用户需要核对函数声明和调用的地方,确保参数数量相同。其次,如果使用Truffle进行测试,可能在测试脚本中调用合约函数时参数传递错误,比如多传了参数或者少传了参数。这时候需要检查测试代码中的函数调用部分。 另外,Solidity中的assert函数是内置函数,通常用于调试,只接受一个条件参数。如果用户误用了assert并传递了额外参数,就会导致错误。例如,assert(a == b, "error message")这样的写法是错误的,因为assert只能有一个参数。正确的做法是使用require或者其他错误处理方式,如果需要传递消息。 还可能涉及到函数重载的问题。如果合约中有多个同名函数但参数不同,调用时可能没有正确匹配到预期的函数,导致参数数量不符。这时候需要检查所有重载函数的定义,并确保调用时参数类型和数量明确匹配。 此外,Truffle测试框架中,有时候部署合约或调用函数时,参数传递的方式可能有误,比如数组或结构体没有正确封装,导致参数解析错误,进而显示参数数量不对。需要检查参数是否按照ABI规范正确传递。 最后,建议用户在修复后重新编译和部署合约,运行测试以确保问题解决。同时,使用Truffle的调试工具或console.log(如果支持)来输出中间值,帮助确认参数传递的正确性。 总结起来,解决步骤包括:检查函数定义和调用处的参数数量,确认内置函数的正确用法,处理函数重载情况,验证参数传递方式,重新编译测试。同时,引用相关文档或社区解决方案来增强答案的可信度。</think>### 逐步解答:Solidity函数调用参数数量错误的解决方法 #### 1. **错误原因分析** 当出现`TypeError: Wrong argument count for function call`时,通常是因为**函数调用时传入的参数数量与函数定义时的参数数量不匹配**。例如: ```solidity // 函数定义:接受1个参数 function validate(uint256 value) public pure returns (bool) { return value > 0; } // 错误调用:传入2个参数 validate(100, true); // ❌ 触发TypeError ``` #### 2. **检查函数签名** - **步骤1**:确认函数声明时的参数数量 检查合约中目标函数的定义,例如: ```solidity function transfer(address to, uint256 amount) public returns (bool) { ... } // ✅ 需要2个参数 ``` - **步骤2**:核对调用时传递的参数 在调用位置(如Truffle测试脚本、前端DApp代码)检查参数数量: ```javascript // Truffle测试脚本示例 await contract.transfer(recipient); // ❌ 缺少amount参数 ``` #### 3. **常见场景与修复** ##### 场景1:误用Solidity内置函数`assert` Solidity的`assert()`函数**仅接受1个布尔参数**。若尝试传递额外参数会报错: ```solidity assert(a == b, "Error message"); // ❌ 错误:参数数量不匹配 ``` **修复方法**: ```solidity require(a == b, "Error message"); // ✅ require支持错误信息参数 ``` ##### 场景2:函数重载导致混淆 若合约中存在同名函数重载,需明确匹配参数类型和数量: ```solidity function calculate(uint a) public pure returns(uint) { ... } function calculate(uint a, uint b) public pure returns(uint) { ... } // 错误调用 calculate(5); // ✅ 匹配第一个函数 calculate(5, 3); // ✅ 匹配第二个函数 calculate(5, "3"); // ❌ 类型不匹配 ``` ##### 场景3:Truffle测试中参数传递错误 在Truffle测试脚本中,注意**参数顺序和数据类型**必须与ABI一致: ```javascript // 正确调用(假设函数需要address和uint256) await contract.transfer( "0x95222290DD7278Aa3Ddd389Cc1E1d165CC4BAfe5", // address web3.utils.toWei("1", "ether") // uint256 ); ``` #### 4. 验证ABI兼容性 - 重新编译合约: 使用`truffle compile`确保最新ABI生成 - 检查部署脚本: 确认合约实例化时使用的ABI与最新编译结果一致 #### 5. 使用调试工具 - **Truffle Debugger**: 通过`truffle debug <txHash>`追踪交易执行过程,定位参数传递问题 - **控制台日志**: 在函数内添加事件日志,输出参数值: ```solidity event LogParams(address indexed caller, uint256 value); function validate(uint256 value) public { emit LogParams(msg.sender, value); // ... } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值