J'essaie d'inclure une fonction appelée kinematicfactor, écrite dans kinematic_factor.cpp dans un autre programme event_rate.cpp."Symboles non définis pour l'architecture x86_64" essayant d'inclure la fonction d'un autre fichier
kinematic_factor.cpp:
#include "kinematic_factor.hpp"
double kinematicfactor (double md) {
double mt = 17.6924; // Mass of Fluorine [GeV/c^2]
double r = 4*mt*md/pow(mt+md, 2);
return r;
}
kinematic_factor.hpp:
#ifndef kinematic_factor_hpp
#define kinematic_factor_hpp
double kinematicfactor (double md);
#endif /* kinematic_factor_hpp */
event_rate:
#include "event_rate.hpp"
#include "kinematic_factor.hpp"
#include <iostream>
#include <cmath>
using namespace std;
int main() {
cout << kinematic_factor(1.0) << endl;
}
Pour autant que je pouvais vérifier, c'était que je devais faire mais je reçois une erreur:
Undefined symbols for architecture x86_64:
"kinematicfactor(double)", referenced from:
_main in event_rate-1d17f7.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Qu'est-ce que je fais mal?
EDIT: J'ai essayé
#include "kinematic_factor.cpp"
Et cela a fonctionné. Mais j'ai entendu dire que l'inclusion des fichiers cpp (et non des fichiers d'en-tête) est une mauvaise pratique pour les apprenants ... Que puis-je faire?
Je peux voir que le nom de la fonction '' kinematic_factor' et kinematicfactor' ne sont pas même dans l'appel de la déclaration et la fonction, le nom de corriger sera problème résolu. Suivez la compilation et l'étape de liaison correctement –