Skip to content

Commit 9a0a3f8

Browse files
committed
docs: update docs
1 parent 26d84cb commit 9a0a3f8

File tree

2 files changed

+57
-3
lines changed

2 files changed

+57
-3
lines changed

docs/NAMING_IMPROVEMENTS.md

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ namespace hand {
3939
| L25/L21 | `LinkerHandL25::LinkerHand` | `linkerhand::hand::L25Hand` | `linkerhand::hand` |
4040
| Modbus L10 | `ModbusLinkerHandL10::LinkerHand` | `linkerhand::hand::ModbusL10Hand` | `linkerhand::hand` |
4141

42-
### 3. 帧属性枚举重命名
42+
### 3. 帧属性枚举重命名和改进
4343

44-
各型号的帧属性枚举已重命名,使用更清晰的命名:
44+
各型号的帧属性枚举已重命名,使用更清晰的命名,并改为使用 `enum class` 以避免命名冲突
4545

4646
| 型号 | 旧枚举名 | 新枚举名 |
4747
|------|---------|---------|
@@ -51,6 +51,23 @@ namespace hand {
5151
| L20 | `LinkerHandL20::FRAME_PROPERTY` | `linkerhand::hand::L20FrameProperty` |
5252
| L25/L21 | `LinkerHandL25::FRAME_PROPERTY` | `linkerhand::hand::L25FrameProperty` |
5353

54+
**重要改进**
55+
- 枚举类型从 `typedef enum` 改为 `enum class`(C++11 强类型枚举)
56+
- 解决了多个枚举类型之间的命名冲突问题
57+
- 枚举值现在需要使用作用域限定符访问(如 `L6FrameProperty::JOINT_POSITION`
58+
59+
**使用示例**
60+
```cpp
61+
// 旧方式(已废弃,但仍可通过向后兼容别名使用)
62+
LinkerHandL6::FRAME_PROPERTY prop = LinkerHandL6::FRAME_PROPERTY::JOINT_POSITION;
63+
64+
// 新方式(推荐)
65+
linkerhand::hand::L6FrameProperty prop = linkerhand::hand::L6FrameProperty::JOINT_POSITION;
66+
67+
// 转换为整数(用于 CAN 帧)
68+
uint8_t frameProperty = static_cast<uint8_t>(linkerhand::hand::L6FrameProperty::JOINT_POSITION);
69+
```
70+
5471
### 4. 参数命名修正
5572

5673
修正了错误的参数命名:
@@ -147,7 +164,11 @@ LinkerHandL10::LinkerHand hand(0x27, "can0", 1000000);
147164
148165
1. **工厂类**:`HandFactory` 已更新为使用新类名,但返回类型仍然是 `IHand` 接口
149166
2. **头文件**:头文件名暂时保持不变,未来可以考虑重命名
150-
3. **枚举**:帧属性枚举已重命名,但枚举值保持不变
167+
3. **枚举**:
168+
- 帧属性枚举已重命名,枚举值保持不变
169+
- 枚举类型已改为 `enum class`,需要使用作用域限定符访问枚举值
170+
- 这解决了多个枚举类型之间的命名冲突问题(如 `JOINT_POSITION`、`TORQUE_LIMIT` 等)
171+
- 如果需要将枚举值转换为整数,使用 `static_cast<uint8_t>()`
151172
152173
## 相关文件
153174

docs/TROUBLESHOOTING.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,39 @@ undefined reference to `LinkerHandApi::...`
107107

108108
---
109109

110+
### 问题:枚举命名冲突编译错误
111+
112+
**错误信息**:
113+
```
114+
error: 'JOINT_POSITION' conflicts with a previous declaration
115+
error: 'TORQUE_LIMIT' conflicts with a previous declaration
116+
error: 'TOUCH_SENSOR_TYPE' conflicts with a previous declaration
117+
```
118+
119+
**可能原因**:
120+
在旧版本中,多个枚举类型(`L6FrameProperty``L7FrameProperty``L10FrameProperty` 等)使用 `typedef enum`,导致枚举值泄漏到外层命名空间,当多个头文件同时被包含时会发生命名冲突。
121+
122+
**解决方案**:
123+
此问题已在最新版本中修复。所有枚举类型已改为使用 `enum class`(C++11 强类型枚举),每个枚举值都在自己的作用域内,不会发生命名冲突。
124+
125+
**如果使用旧版本**:
126+
1. 升级到最新版本的 SDK
127+
2. 如果必须使用旧版本,可以:
128+
- 避免同时包含多个型号的头文件
129+
- 使用前向声明和单独编译单元
130+
- 使用命名空间别名隔离不同的枚举类型
131+
132+
**新版本使用方式**:
133+
```cpp
134+
// 使用作用域限定符访问枚举值
135+
linkerhand::hand::L6FrameProperty prop = linkerhand::hand::L6FrameProperty::JOINT_POSITION;
136+
137+
// 转换为整数(用于 CAN 帧)
138+
uint8_t frameProperty = static_cast<uint8_t>(linkerhand::hand::L6FrameProperty::JOINT_POSITION);
139+
```
140+
141+
---
142+
110143
### 问题:CMake 版本过低
111144

112145
**错误信息**:

0 commit comments

Comments
 (0)