FAQ
卡住时先看这里
下面这些都不需要打开仓库。工程文件在「起步」页和压缩包里已经给全了。
编译报 redefinition / 重复定义
你把章节里的示意代码贴进了 class Vector 体内。作业纸上半只放声明, 下半才是函数定义。用编辑器撤销 class 里多出来的函数体,改去替换带 TODO(step …) 的那一段。
报 default arguments are not allowed
类外定义不要写 = Allocator()。默认实参只出现在 class 里的声明上。网站「可粘贴代码」已经按类外形式写好,整段替换即可。
报 requires clause differs from declaration
声明和定义的 requires 必须一致。起步页上的作业纸已经写好约束, 不要删。拷贝构造、拷贝赋值、push_back(const T&)、resize(n, value) 都需要 std::copy_constructible<T>。
报 template / 成员函数模板对不上
emplace_back、uninitialized_copy_n、grow_buffer_and_append 有两层 template。 少贴一层就会编译失败。对照网站代码,从第一个 template <typename T, typename Allocator> 复制到函数结尾。
测试仍抛 logic_error 或 out_of_range("TODO")
对应函数还没替换。在作业纸里搜索 TODO(,回到那一章把整段贴上。
CMake 下载 GoogleTest 失败
测试依赖公开的 GoogleTest v1.15.2 源码包(GitHub),不是本教程的仓库。 需要能访问 https://github.com/google/googletest/archive/refs/tags/v1.15.2.tar.gz。 若必须离线:先下载这个 tar.gz 放到工程根目录,把 CMakeLists.txt 里 FetchContent 的 URL 改成本地文件,例如 URL $${CMAKE_CURRENT_SOURCE_DIR}/v1.15.2.tar.gz。
undefined reference to std::… / 找不到 libstdc++
部分环境里 /usr/bin/c++ 是 Clang 却链到 GNU 标准库。配置时指定:
cmake -B build -DCMAKE_CXX_COMPILER=g++ -DMINI_VECTOR_USE_STUDENT=ONASan 一跑就报堆错误
多半是 deallocate 的 n 和 allocate 时不一致,或对未初始化内存当 T 来读。对照 Step 02 / 03。暂时关掉 sanitizer 也能编过,但不要当作做完:
cmake -B build -DMINI_VECTOR_SANITIZE=OFF -DCMAKE_CXX_COMPILER=g++我想先看全绿再拆
把参考答案存成 include/mini_vector/vector.hpp(起步页最后一张卡片,或压缩包里已有), 配置时不要打开 MINI_VECTOR_USE_STUDENT。