我有一个内联函数的声明恰好是递归的。既然它是递归的,那么将其声明为内联是没有意义的,那么当我删除它时为什么我的链接会失败呢?
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;
}
答案 0 :(得分:5)
inline
告诉编译器不要导出符号。如果您不使用它,该符号将由包含该文件的所有编译单元导出,从而产生多重定义。
4)每个程序应该只包含每个非内联函数的一个定义或变量使用的变量 在该计划中;无需诊断。定义可以在程序中明确显示,可以找到 在标准或用户定义的库中,或(在适当的时候)它是隐式定义的(见12.1,12.4和 12.8)。内联函数应在每个使用它的翻译单元中定义。
这实际上是关键字inline
的唯一相关用法 - 实际上内联函数取决于编译器.IMO,关键字在这个意义上甚至不到一个提示。