AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 29
Declaration vs definition: 链接错误的来源
C++ SELF
等级 29,
课时 0
分析为什么在多文件 C++ 项目中会出现“编译通过但链接失败”的情况:什么是
declaration
(存在的承诺)与
definition
(实际的实现/内存),翻译单元(
translation unit
)如何组织,编译器检查什么而链接器要求什么,以及如何在示例小项目
TaskBook
中把声明放到
.hpp
、定义放到
.cpp
的正确做法。
同一实体不能被重复定义
C++ SELF
等级 29,
课时 1
我们讲解在多文件 C++ 项目中的规则
ODR
(
One Definition Rule
):什么是声明与定义的区别、为什么链接器会报
multiple definition
、为什么
#pragma once
只保护同一
.cpp
内的重复包含、在
.hpp
中定义函数和全局变量有哪些危险、以及如何按“教科书”方式修复问题(在头文件中声明,在一个
.cpp
中定义)。最后 — 常见错误和对
inline
作用的谨慎引入。
inline
‑函数与
inline
‑变量
C++ SELF
等级 29,
课时 2
我们来分析为什么在头文件 (
.hpp
) 中直接定义函数和变量常常会导致链接错误
multiple definition
,以及关键字
inline
实际上做了什么(它是关于
ODR
,而不是“加速”),如何正确地编写
inline
‑函数和
inline
‑变量(包括
inline constexpr
),以及在哪些情况下
inline
会对构建和架构造成伤害。
static
和匿名命名空间
C++ SELF
等级 29,
课时 3
我们来讲讲如何在 C++ 的
.cpp
文件中“隐藏”实现名称:什么是
external
/
internal linkage
,文件级别的
static
和带花括号的
namespace
是如何工作的,为什么在头文件中使用
static
会在所有翻译单元中复制实体,internal linkage 如何帮助避免名字冲突,以及类似
undefined reference
的链接错误来自何处。
典型的 linker 错误
C++ SELF
等级 29,
课时 4
我们来分析在多文件 C++ 项目中最常见的链接错误:
multiple definition
和
undefined reference
有何不同,为什么
ODR
和文本性质的
#
include
会导致符号“被复制”,什么时候使用
extern
、
inline
、
static
和
namespace
,以及如何根据错误信息诊断问题(包括流程图和一个名为
MiniPlanner
的迷你项目)。
Please enable JavaScript to continue using this application.