说我有以下文件。这是无效的C ++(链接器扼流圈,所以是的)还是我的语法错误? constexpr函数的前向声明必须与其定义在同一个文件中吗?
header.h
extern constexpr int fun(int);
source.cpp
constexpr int fun(int x)
{
return x * 2;
}
答案 0 :(得分:4)
这是错的。 constexpr
表示该函数是内联的。必须在使用它的每个翻译单元中定义内联函数。如果您在{{1}}以外的翻译单元中包含该标头并使用该功能,则该翻译单元缺少该定义。
因此,解决方案是将实现移至标头。无需担心多重定义,因为函数是内联的。
技术上并不需要在同一个文件中,但由于定义必须在每个使用该函数的文件中,因此最简单的方法是在同一个文件头中定义它。