--- id: VDE-016 status: fixed severity: high category: bug date: 2026-07-27 updated: 2026-07-28 reporter: ViewDesign related: VDE-001, VDE-005, VDE-010 --- # VDE-016: ssi_boolean.cpp 两阶段名称查找修正不完整 ## 问题描述 v1.0.2 添加了 `#include `,但仍无法通过 GCC 编译。根本原因是 **匿名命名空间** 在 GCC 两阶段查找下不能被外部引用。 ## 剩余编译错误 ``` error: 'SSICurveData' was not declared in this scope (it is in vde::brep::{anonymous}::SSICurveData) error: 'begin' was not declared in this scope error: 'end' was not declared in this scope (GCC needs #include , MSVC pulls it transitively) error: 'ClassResult' was not declared in this scope (should be vde::brep::ClassResult; MSVC allows unqualified lookup) ``` ## 根因分析 1. **SSICurveData** — 定义在 `vde::brep` 命名空间的**匿名 namespace** 中。匿名 namespace 内的类型在翻译单元外部不可见。GCC 严格执行两阶段查找时,放在匿名 namespace 中的类型在其他函数中找不到。**解决方案**:将 `struct SSICurveData` 移出匿名 namespace,放到显式的 `namespace vde::brep` 中。 2. **begin/end** — GCC 不会通过 `` 传递引入 `std::begin`/`std::end`,需要显式 `#include `。 3. **ClassResult** — 需要 `using vde::brep::ClassResult;`(MSVC 允许隐式查找,GCC 不允许)。 ## 当前 Workaround ViewDesign 排除 vde_brep 及其依赖(vde_mesh, vde_boolean, vde_sdf, vde_capi)。 ## 建议修复 ```cpp // ssi_boolean.cpp // 1. 将 ssi_boolean.cpp 中的匿名命名空间改为显式命名空间: // BEFORE: namespace { struct SSICurveData { ... }; } // AFTER: namespace vde::brep { struct SSICurveData { ... }; } // using namespace vde::brep; // 保持当前代码无需修改 // 2. 添加 #include // 3. 添加 using vde::brep::ClassResult; ```