我有这个文件:
//Q2a.h
#ifndef Q2A_H
#define Q2A_H
inline int MyFactorial(int a)
{
if (a < 2)
return 1;
return a*MyFactorial(a-1);
}
int NumPermutations(int b);
#endif
//Q2a.cpp
#include "Q2a.h"
int NumPermutations(int b)
{
return MyFactorial(b);
}
and file with the main- Q2b.cpp
我注意到,当存在递归函数时,编译器通常会忽略内联decle。
但是我的问题是为什么如果删除内联声明,我可以这样做:
g++ -Wall -g -c Q2a.cpp -o Q2a.o
g++ -Wall -g -c Q2b.cpp -o Q2b.o
这些很好,但是在链接阶段:
g++ -Wall -g -c Q2a.o Q2b.o -o Q2
我收到一个错误:MyFactorial(int)的多个定义
最佳答案
因为当您使用#include "Q2a.h"
时,实际上是在对内容进行文本替换,因此Q2a.cpp和Q2b.cpp最终都定义了一个名为MyFactorial()
的函数。您要么需要使用inline
,要么在一个源文件中定义函数。
请注意,使用inline
对递归函数无济于事!
关于c++ - 递归内联函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3647428/