Files
ViewDesignEngine/docs/feedback/VDE-016.md
T
茂之钳 d5c00a0406
Build & Test / build-and-test (push) Waiting to run
Build & Test / python-bindings (push) Blocked by required conditions
CI / Build & Test (push) Failing after 1m32s
CI / Release Build (push) Failing after 1m33s
fix(v1.0.1): VDE-016 — reorder #include <iterator> for consistency; VDE-017 — already fixed on main (CMAKE_CURRENT_SOURCE_DIR)
2026-07-28 10:45:59 +08:00

1.9 KiB

id, status, severity, category, date, updated, reporter, related
id status severity category date updated reporter related
VDE-016 fixed high bug 2026-07-27 2026-07-28 ViewDesign VDE-001, VDE-005, VDE-010

VDE-016: ssi_boolean.cpp 两阶段名称查找修正不完整

问题描述

v1.0.2 添加了 #include <algorithm>,但仍无法通过 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 <iterator>, 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 不会通过 <algorithm> 传递引入 std::begin/std::end,需要显式 #include <iterator>

  3. ClassResult — 需要 using vde::brep::ClassResult;(MSVC 允许隐式查找,GCC 不允许)。

当前 Workaround

ViewDesign 排除 vde_brep 及其依赖(vde_mesh, vde_boolean, vde_sdf, vde_capi)。

建议修复

// ssi_boolean.cpp

// 1. 将 ssi_boolean.cpp 中的匿名命名空间改为显式命名空间:
//    BEFORE:  namespace { struct SSICurveData { ... }; }
//    AFTER:   namespace vde::brep { struct SSICurveData { ... }; }
//             using namespace vde::brep;  // 保持当前代码无需修改

// 2. 添加 #include <iterator>

// 3. 添加 using vde::brep::ClassResult;