1.9 KiB
1.9 KiB
id, status, severity, category, date, updated, reporter, related
| id | status | severity | category | date | updated | reporter | related |
|---|---|---|---|---|---|---|---|
| VDE-016 | open | critical | bug | 2026-07-27 | 2026-07-27 | ViewDesign | VDE-001, VDE-005, VDE-010 |
VDE-016: ssi_boolean.cpp GCC 名称查找失败(using 声明无效)
问题描述
在 vde::brep 作用域内使用 using vde::brep::SSICurveData; 和 using vde::brep::ClassResult; 是空操作,GCC 忽略。匿名 namespace 关闭后的公共函数仍找不到这些类型。
已尝试的方案及其结果:
| 方案 | 代码 | 结果 |
|---|---|---|
| v1.0.4 | using 放在 namespace{ 内部 |
仅匿名 ns 内有效,关闭后失效 |
| v1.0.5 | using ClassResult; / using SSICurveData; |
语法错误:expected nested-name-specifier |
| 修正语法 | using vde::brep::ClassResult; / using vde::brep::SSICurveData; |
空操作,GCC 忽略 |
| 全限定名 | vde::brep::SSICurveData / vde::brep::ClassResult |
类型找到,但级联问题(enum值/mesh) |
编译错误 (v1.0.5, 无 workaround)
error: 'SSICurveData' was not declared at lines 510, 613
error: 'begin'/'end' was not declared (级联)
error: 'ClassResult' was not declared at line 644
唯一可用的修复方案:全限定名
已验证可行:将所有非限定名替换为全限定名:
SSICurveData → vde::brep::SSICurveData
ClassResult → vde::brep::ClassResult
OUT / IN → vde::brep::OUT / vde::brep::IN (enum values)
mesh → vde::mesh (namespace)
代码量较大(~20+ 处),但有效。
根因
GCC 两阶段查找对此文件的 namespace 嵌套结构处理与 MSVC 不同。即使在同一个 vde::brep namespace 中,#include 引入的类型 + 局部前向声明 + 多个匿名 namespace 的组合导致 GCC 在第二遍查找(非限定名)时找不到同命名空间的符号。
当前 Workaround
ViewDesign 排除 vde_brep 及其依赖。