我有一个内联函数的声明恰好是递归的.因为它是递归的,所以没有必要将其内联声明,所以当我删除它时,为什么我的链接会失败?
3个档案:
\\File1.h
#ifndef FILE1_H
#define FILE1_H
inline int Factorial(int a)
{
if (a < 2)
return 1;
return a*Factorial(a-1);
}
int PermutationsNum(int b);
#endif
\\File1.cpp
#include "File1.h"
int PermutationsNum(int b)
{
return Factorial(b);
}
\\File2.cpp
#include <iostream>
#include "File1.h"
int main()
{
std::cout << "permutations of 7 elements: " << PermutationsNum(7) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
inline告诉编译器不要导出符号.如果不使用它,符号将由包含该文件的所有编译单元导出,从而产生多重定义.
4)每个程序应包含该程序中每个非内联函数 或变量的一个定义 ; 无需诊断.该定义可以在程序中明确显示,可以在标准或用户定义的库中找到,或者(在适当的时候)隐式定义(见12.1,12.4和12.8).内联函数应在每个使用它的翻译单元中定义.
这inline实际上是关键字的唯一相关用法- 实际上内联函数取决于编译器.IMO,关键字在这个意义上甚至不到一个提示.