2015-10-28 3 views
0

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?

+0

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 –

Répondre

0

Comment avez-vous compilé ce programme, je suis capable de compiler le même programme correctement. Je soupçonne que cela devrait être un problème de liaison.

Vous devez compiler la source ensemble pour compiler et lier.

g++ kinematic_factor.cpp event_rate.cpp -o event_rate

+0

Merci beaucoup de m'avoir aidé! – Matthew