Files
张宗平 13b3ebbe14 课程代码仓库初始化:Part1 (144) + Part3 (29) 全量生成与验证
把川大 wiki「02.Qt方向」课程代码整理为 CMake 管理的可编译运行项目。

Part1 C/C++ 强化 (p01/, 144 目标, host gcc/g++ 构建, 全绿):
- 修复全部编译失败:补 <cstring>/<fstream>/<iomanip>/<vector> 等缺失头
  (common_fix + infer_stl_includes 自动检测注入)、修正 pause() 壳注入
  (改检测已转换后的 pause 调用)、namespace 提升出函数体、const 成员函数
  正确性、dedupe 不再破坏函数重载集、K&R 隐式 int / 动态异常规范等
  C++17 移除特性的可编译等价改写。
- 目录采用深缩写 p01/ch04/s03/ (原 part1_cpp/ch04_class_object/03_ctor_dtor)。

Part3 Qt 桌面 (p03/, 29 目标, 隔离 Qt 5.14.2 构建, 全绿):
- gen_part3.py: Qt 外壳模板 (main+QApplication+show, QTimer 自动退出便于
  offscreen 验证)、AUTOMOC + .moc include、rewrite_* 处理散文混入/重载/
  资源依赖、生成占位 png/gif + .qrc + rundata 样例数据。
- 修正 QLable 笔误、全角分号、.→->、Windows 路径、QApplication 阻塞事件
  循环改为 QCoreApplication 等。

任务1 概念/版本验证:
- tools/std_probe.py: 跨 -std= 编译探针 (--pedantic-errors 让已废除特性硬失败)。
- tools/demo_versions/: K&R 隐式 int、三目左值、void* 转换、enum 赋整、
  const 经指针、动态异常规范 共 6 个跨版本演示。
- docs/VERSION_NOTES.md: 每条「原文说法→C17/C++17 是否成立→何版本成立→已验证」。

文档: 顶层 README、docs/SOURCE_PAGES.md (页面→目录映射)、
docs/ERRATA.md (Part1 修正)、docs/ERRATA_part3.md (Part3 修正)。
另修复 tools/run.sh / run_qt.sh 的 ${1:?...} 引号语法 bug。

隔离 Qt 验证: ldd 0 系统 Qt 引用; 173/173 目标全绿; p03 offscreen 运行通过。
2026-06-30 14:16:55 +08:00

438 lines
26 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ERRATA — 代码修正记录
本文件由 `tools/gen_part1.py` 自动生成,记录对 wiki 原始代码块的每一处修正。
格式:`[pageId:blockIdx]` 类型 → 原内容 → 修正后 → 依据。
## [58954439:3] illegal-in-function
- **原文**`namespace 定义 / 命名空间作用域成员函数定义 写在函数体内(void test(){ namespace A{...} }`
- **修正**`把 namespace 块与成员定义提升到文件作用域,test() 仅使用其成员`
- **依据**:C++ 不允许在函数体内定义 namespace 或其成员函数;标准要求它们处于全局/命名空间作用域。原 wiki 写法无法编译;提升后保留教学意图。
## [58954439:6] illegal-in-function
- **原文**`namespace 定义 / 命名空间作用域成员函数定义 写在函数体内(void test(){ namespace A{...} }`
- **修正**`把 namespace 块与成员定义提升到文件作用域,test() 仅使用其成员`
- **依据**:C++ 不允许在函数体内定义 namespace 或其成员函数;标准要求它们处于全局/命名空间作用域。原 wiki 写法无法编译;提升后保留教学意图。
## [58954439:7] illegal-in-function
- **原文**`namespace 定义 / 命名空间作用域成员函数定义 写在函数体内(void test(){ namespace A{...} }`
- **修正**`把 namespace 块与成员定义提升到文件作用域,test() 仅使用其成员`
- **依据**:C++ 不允许在函数体内定义 namespace 或其成员函数;标准要求它们处于全局/命名空间作用域。原 wiki 写法无法编译;提升后保留教学意图。
## [58954439:14] removed-feature
- **原文**`K&R 隐式 intint fun1(i)、g(){...})及无类型参数 fun3() 接受任意实参`
- **修正**`显式 intint fun1(int i)、int g(void){...}),fun2 形参显式为 char*fun3() → fun3(void)、调用改为 fun3()C17 不允许向 (void) 函数传参)`
- **依据**:隐式 int 与无类型/可变参数在 C99 起被废除,C17 不可编译。原始 C89 形式仍可由 tools/std_probe.py 与 tools/demo_versions/kr_implicit_int.c 在 -std=c89 下演示。
## [58954439:24] missing-symbol
- **原文**`const Person 演示引用 Person,但 Person 定义在另一小节(拆分为独立文件后丢失)`
- **修正**`在本块顶部补一个最小 Person 定义(age 带默认成员初始化,使 const 对象可默认构造)`
- **依据**:原 wiki 把 Person 定义与 const 演示放在同节、本应同文件;按「示例相对隔离」拆开后本块自洽编译所需的最小前置定义。const 聚合对象需默认成员初始化才能默认构造(C++17)。
## [58954439:38] syntax
- **原文**`class Person{...}(末尾缺分号)`
- **修正**`class Person{...};`
- **依据**:C++ 类/结构体定义后必须有分号。
## [58954439:41] illegal-in-function
- **原文**`namespace A/B 定义(含重载集 MyFunc)写在函数体内(void test(){ namespace A{...} }`
- **修正**`把 namespace 块提升到文件作用域,test() 通过 A::/B:: 调用各重载`
- **依据**:C++ 不允许在函数体内定义 namespace;标准要求其处于全局/命名空间作用域。原 wiki 写法无法编译;提升后保留重载集演示意图。
## [58954439:42] ambiguous-overload
- **原文**`main 中 MyFunc("hello") 在 MyFunc(string) 与 MyFunc(string,int=10) 间二义,无法编译`
- **修正**`注释保留二义调用作说明,main 只显式调用双参重载(单参形式因二义不可调用)`
- **依据**:函数重载遇上默认参数时,编译器无法在两个可行候选间抉择(二义性)。即使强转 std::string 也无法消除——两候选对单个 string 实参同等匹配。原文意在演示此现象,作为可运行示例只能保留可调用的双参形式并注释说明二义点。
## [58954439:46] missing-definition
- **原文**`main 调用 func1()/func2(),但本文件仅有 extern "C" 声明(定义在配对的 MyModule.c`
- **修正**`在本文件就地补 func1/func2 的 extern "C" 定义(最小实现)`
- **依据**:原 wiki 把声明与定义分属两文件;按「示例相对隔离」拆分为独立目标后,本文件缺少定义导致链接失败。补最小实现使其自洽可运行,保留 extern "C" 声明的教学意图。
## [58954448:0] missing-include
- **原文**`调用 strcpy/strlen/strcmp 等 C 字符串函数但未 #include <cstring>`
- **修正**`由生成模板统一补 #include <cstring>`
- **依据**:C 字符串/内存函数声明在 <cstring>C++/ <string.h>C);原 wiki 代码依赖教学环境传递包含,隔离编译时须显式 include。
## [58954451:0] missing-include
- **原文**`调用 strcpy/strlen/strcmp 等 C 字符串函数但未 #include <cstring>`
- **修正**`由生成模板统一补 #include <cstring>`
- **依据**:C 字符串/内存函数声明在 <cstring>C++/ <string.h>C);原 wiki 代码依赖教学环境传递包含,隔离编译时须显式 include。
## [58954451:1] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <algorithm>`
- **修正**`由生成模板统一补 #include <algorithm>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954451:2] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <algorithm>`
- **修正**`由生成模板统一补 #include <algorithm>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954451:3] missing-include
- **原文**`调用 strcpy/strlen/strcmp 等 C 字符串函数但未 #include <cstring>`
- **修正**`由生成模板统一补 #include <cstring>`
- **依据**:C 字符串/内存函数声明在 <cstring>C++/ <string.h>C);原 wiki 代码依赖教学环境传递包含,隔离编译时须显式 include。
## [58954451:7] missing-include
- **原文**`调用 strcpy/strlen/strcmp 等 C 字符串函数但未 #include <cstring>`
- **修正**`由生成模板统一补 #include <cstring>`
- **依据**:C 字符串/内存函数声明在 <cstring>C++/ <string.h>C);原 wiki 代码依赖教学环境传递包含,隔离编译时须显式 include。
## [58954451:8] pseudo-code
- **原文**`new Person / malloc / 构造函数(中文散文混入语句,不可编译)`
- **修正**`可编译对照程序:new vs malloc+placement new,散文转注释`
- **依据**:原文是对照式伪代码(含「相当于:」「构造函数」等中文散文),无法编译。改为可编译的 new 与 malloc 行为对照(用 placement new 对齐构造语义)。
## [58954451:9] missing-include
- **原文**`调用 strcpy/strlen/strcmp 等 C 字符串函数但未 #include <cstring>`
- **修正**`由生成模板统一补 #include <cstring>`
- **依据**:C 字符串/内存函数声明在 <cstring>C++/ <string.h>C);原 wiki 代码依赖教学环境传递包含,隔离编译时须显式 include。
## [58954451:11] missing-include
- **原文**`调用 strcpy/strlen/strcmp 等 C 字符串函数但未 #include <cstring>`
- **修正**`由生成模板统一补 #include <cstring>`
- **依据**:C 字符串/内存函数声明在 <cstring>C++/ <string.h>C);原 wiki 代码依赖教学环境传递包含,隔离编译时须显式 include。
## [58954451:12] missing-include
- **原文**`调用 strcpy/strlen/strcmp 等 C 字符串函数但未 #include <cstring>`
- **修正**`由生成模板统一补 #include <cstring>`
- **依据**:C 字符串/内存函数声明在 <cstring>C++/ <string.h>C);原 wiki 代码依赖教学环境传递包含,隔离编译时须显式 include。
## [58954451:13] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954456:1] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954456:2] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954456:3] const-correctness
- **原文**`const 成员函数 ChangePerson() const 内修改非 mutable 成员 mAgemAge = 100`
- **修正**`注释掉对 mAge 的修改,保留对 mutable mID 的修改,并加注释说明`
- **依据**:const 成员函数承诺不修改对象的逻辑状态,故不得修改非 mutable 数据成员;mID 被 mutable 修饰例外。原写法在 C++17 下编译报错。
## [58954457:0] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954458:3] typo
- **原文**`(全角分号)`
- **修正**`;(半角)`
- **依据**:全角分号在 C/C++ 中非法,统一替换为半角。
## [58954458:3] missing-include
- **原文**`调用 strcpy/strlen/strcmp 等 C 字符串函数但未 #include <cstring>`
- **修正**`由生成模板统一补 #include <cstring>`
- **依据**:C 字符串/内存函数声明在 <cstring>C++/ <string.h>C);原 wiki 代码依赖教学环境传递包含,隔离编译时须显式 include。
## [58954458:4] missing-include
- **原文**`调用 strcpy/strlen/strcmp 等 C 字符串函数但未 #include <cstring>`
- **修正**`由生成模板统一补 #include <cstring>`
- **依据**:C 字符串/内存函数声明在 <cstring>C++/ <string.h>C);原 wiki 代码依赖教学环境传递包含,隔离编译时须显式 include。
## [58954461:0] prose-in-code
- **原文**`class IndexPage 前混入孤立中文散文词「网页类」(非注释非代码)`
- **修正**`把该散文行转为注释`
- **依据**:wiki 正文标题词被误纳入代码块,C++ 无法解析;转为注释保留教学上下文。
## [58954461:9] typo
- **原文**`“(全角引号)`
- **修正**`"(半角)`
- **依据**:字符串/字符字面量须用半角引号。
## [58954461:9] typo
- **原文**`”(全角引号)`
- **修正**`"(半角)`
- **依据**:字符串/字符字面量须用半角引号。
## [58954469:5] abstract-instantiation
- **原文**`test() 中 B b; 试图实例化抽象类 B(B 有纯虚析构函数 virtual ~B()=0`
- **修正**`注释掉 B b; 并加说明(B 是抽象类不可实例化),A a; 保留`
- **依据**:含纯虚函数(含纯虚析构函数)的类是抽象类,C++ 禁止创建其对象。原文此处正是演示该约束,但作为可编译示例需把非法构造注释化。
## [58954472:5] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954472:9] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954472:10] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954472:11] prose-in-code
- **原文**`「测试代码:」中文散文词 + 文件作用域裸语句(MyArray<int> myArrayInt(10);、for 循环、Push_back 调用等)直接铺在类定义之后,无函数包裹`
- **修正**`删除散文词,把测试驱动语句包进 main(),保留 MyArray 模板 + Person 类 + 打印函数`
- **依据**:C++ 不允许在文件作用域直接写可执行语句(如 for 循环、函数调用);中文散文词亦非法。原文是把「使用示例」当散文铺排;重写为可编译运行的单文件程序,保留类模板应用的教学意图。
## [58954473:2] syntax
- **原文**`//int b = const_cast<int>(a); }(闭合花括号误入注释行)`
- **修正**`把 } 移出注释作为 test01() 的正常闭合花括号`
- **依据**:原 wiki 把 test01() 的闭合 } 误写进注释,导致函数体未结束、后续 test02() 被嵌套在 test01() 内,C++ 禁止函数内定义函数。
## [58954474:1] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954474:2] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954474:3] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954474:4] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954474:4] removed-feature
- **原文**`动态异常规范 throw(int,char,char*) 与 throw()C++17 已移除)`
- **修正**`throw() → noexceptthrow(类型...) → noexcept(false),并注释说明旧语义`
- **依据**:动态异常规范在 C++11 弃用、C++17 移除,C++17 下是语法错误。throw() 的等价物是 noexcept;带类型列表的动态规范无法在现代 C++ 中精确表达,用 noexcept(false) 近似(表示可能抛异常)。旧规范演示见 tools/demo_versions/dynamic_exception_spec.cpp(在 -std=c++14 下编译)。
## [58954474:7] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954474:8] override-noexcept
- **原文**`MyOutOfRange::what() const 重写 exception::what() 但缺 noexcept`
- **修正**`补 noexceptvirtual const char* what() const noexcept`
- **依据**C++11 起 std::exception::what() 声明为 noexcept;重写函数的异常规范不得比基类更宽松,必须同样 noexcept,否则 C++17 编译报「looser exception specification」。原 wiki 写于旧标准,未带 noexcept。
## [58954476:0] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <string>`
- **修正**`由生成模板统一补 #include <string>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954476:1] missing-include
- **原文**`调用 strcpy/strlen/strcmp 等 C 字符串函数但未 #include <cstring>`
- **修正**`由生成模板统一补 #include <cstring>`
- **依据**:C 字符串/内存函数声明在 <cstring>C++/ <string.h>C);原 wiki 代码依赖教学环境传递包含,隔离编译时须显式 include。
## [58954476:2] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <algorithm>, <iomanip>`
- **修正**`由生成模板统一补 #include <algorithm> <iomanip>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954476:3] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954476:3] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <fstream>, <string>`
- **修正**`由生成模板统一补 #include <fstream> <string>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954476:4] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954476:4] missing-include
- **原文**`调用 strcpy/strlen/strcmp 等 C 字符串函数但未 #include <cstring>`
- **修正**`由生成模板统一补 #include <cstring>`
- **依据**:C 字符串/内存函数声明在 <cstring>C++/ <string.h>C);原 wiki 代码依赖教学环境传递包含,隔离编译时须显式 include。
## [58954476:4] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <fstream>`
- **修正**`由生成模板统一补 #include <fstream>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954476:4] missing-default-ctor
- **原文**`Person 只有 Person(char*,int) 构造,但二进制读取用 Person p3; 默认构造`
- **修正**`补一个空的默认构造 Person(){}`
- **依据**:二进制文件读取需先默认构造一个占位对象再 read() 填充;原 Person 无默认构造,C++17 报「no matching function for call to Person::Person()」。
## [58954487:0] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954487:0] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <vector>`
- **修正**`由生成模板统一补 #include <vector>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954488:1] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954488:1] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <vector>`
- **修正**`由生成模板统一补 #include <vector>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954488:2] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954488:2] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <algorithm>, <vector>`
- **修正**`由生成模板统一补 #include <algorithm> <vector>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954488:3] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954488:3] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <algorithm>, <vector>`
- **修正**`由生成模板统一补 #include <algorithm> <vector>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954488:4] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954488:4] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <list>`
- **修正**`由生成模板统一补 #include <list>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954488:4] implementation-specific
- **原文**`直接访问 MSVC STL 私有成员 _Nodeptr/_Myhead/_Next/_Myval/_Mysize(演示 list 节点结构)`
- **修正**`改用标准迭代器遍历,以注释图示说明环形双向链表结构`
- **依据**:MSVC STL 的下划线大写成员是实现细节,libstdc++ 无等价物,跨编译器不可移植。C++ 标准不暴露容器内部节点结构;原写法仅在 MSVC 下可编译。改用标准接口 + 图示注释保留教学意图。
## [58954488:5] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <set>`
- **修正**`由生成模板统一补 #include <set>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954488:5] const-comparator
- **原文**`set 的排序仿函数 MyCompare02/MyCompare03 的 operator() 非 const`
- **修正**`给两个 operator() 加 const 修饰`
- **依据**C++14 起,关联容器(set/map)的比较对象必须可 const 调用(标准要求 Compare 对象满足 invocable as const)。原 wiki 的非 const operator() 在 C++17 libstdc++ 下触发 static_assert。
## [58954488:6] platform
- **原文**`system("pause")`
- **修正**`pause()`
- **依据**system("pause") 仅 Windows 可用;改用仓库提供的便携 pause() 壳函数 (读一行 stdin 等待回车),行为一致,Linux 可编译运行。
## [58954488:6] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <algorithm>, <map>, <vector>`
- **修正**`由生成模板统一补 #include <algorithm> <map> <vector>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954498:1] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <algorithm>, <vector>`
- **修正**`由生成模板统一补 #include <algorithm> <vector>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954498:2] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <algorithm>, <functional>, <vector>`
- **修正**`由生成模板统一补 #include <algorithm> <functional> <vector>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954498:3] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <algorithm>, <functional>, <vector>`
- **修正**`由生成模板统一补 #include <algorithm> <functional> <vector>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954498:4] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <algorithm>, <vector>`
- **修正**`由生成模板统一补 #include <algorithm> <vector>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。
## [58954498:5] missing-include
- **原文**`使用 STL/IO 符号(如 vector/for_each/ifstream/setw 等)但未 #include <algorithm>, <vector>`
- **修正**`由生成模板统一补 #include <algorithm> <vector>`
- **依据**:原 wiki 代码假定教学环境已传递包含相应标准库头;按「示例相对隔离」独立编译时须显式 include。检测依据为符号使用(见 gen_sources.infer_stl_includes)。