|
本帖最后由 bestkakkoii 于 2024-9-23 15:36 编辑
# 调试报告:炫语言模块相同命名空间解析问题
## 1. 问题描述
在项目中,使用了多个用C++编写的模块。当两个不同的C++模块使用相同的命名空间(英文名为cxx,中文别名为炫)时,出现了枚举、类或函数无法正常解析的问题。
### 1.1 具体症状
- 当两个C++模块(如模块A和模块B)使用相同的命名空间时:
- 位于首先引入的模块中的类、函数、枚举可以被正确判断。
- 位于随后引入的模块中的类、函数、枚举无法被正确判别。
- 交换模块引入顺序后,症状会相应变化,始终是先引入的模块中的内容可以被正确解析。
### 1.2 环境信息
- 模块实现语言:C++
- 项目结构:包含多个C++模块,这些模块使用相同的命名空间(英文名cxx,中文别名炫)
## 2. 问题复现步骤
1. 准备环境:
- 准备两个用C++编写的模块(模块A和模块B)
2. 模块内容:
- 在模块A中定义命名空间:
```cpp
//@别名 炫
namespace cxx {
// 定义一些类、函数或枚举
class ClassA {};
void functionA() {}
enum EnumA { ValueA1, ValueA2 };
}
```
- 在模块B中同样定义命名空间:
```cpp
//@别名 炫
namespace cxx {
// 定义一些不同的类、函数或枚举
class ClassB {};
void functionB() {}
enum EnumB { ValueB1, ValueB2 };
}
```
3. 使用模块:
- 场景1:
- 首先引入模块A
- 然后引入模块B
- 场景2:
- 首先引入模块B
- 然后引入模块A
4. 尝试访问模块内容:
- 使用完全限定名称访问模块A中cxx命名空间的内容
- 使用完全限定名称访问模块B中cxx命名空间的内容
5. 观察结果:
- 场景1:
- 验证模块A中cxx命名空间的内容可以被正确访问
- 验证模块B中cxx命名空间的内容无法被正确访问或解析
- 场景2:
- 验证模块B中cxx命名空间的内容可以被正确访问
- 验证模块A中cxx命名空间的内容无法被正确访问或解析
## 3. 补充说明
- 此问题仅在两个或多个模块使用完全相同的命名空间(包括相同的英文名cxx和中文别名炫)时出现。
- 问题与模块的引入顺序直接相关,始终是先引入的模块中的命名空间内容可以被正确解析。
- 交换模块的引入顺序会导致可以被解析的内容相应变化,但问题模式保持一致。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|