j'ai ces fichiers:fonction inline récursive
//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
Je remarque que le compilateur ignore généralement le decleration en ligne quand il y a des fonctions récursives. mais ma question est pourquoi si je retire la déclaration en ligne, je peux faire:
g++ -Wall -g -c Q2a.cpp -o Q2a.o
g++ -Wall -g -c Q2b.cpp -o Q2b.o
ceux qui sont très bien, mais à l'étape de liaison:
g++ -Wall -g -c Q2a.o Q2b.o -o Q2
j'obtiens une erreur: définition multiple de ` MyFactorial (int)
La queue-récursive 'inline' est raisonnable, mais ce n'est pas le cas. – Potatoswatter