2009-09-27 3 views
0

Ceci est probablement très simple, mais cela m'empêche de suivre le chemin C++. Je suis actuellement en train de lire des accélérés en C++ et j'ai décidé de surcharger l'un des exercices. Tout a bien fonctionné et mon code s'est bien passé jusqu'à ce que je le divise en un en-tête et un fichier source séparé. Lorsque j'importe mon fichier source .cpp contenant certaines fonctions que j'ai écrites, tout fonctionne bien. Mais quand j'essaye d'importer les fonctions par l'intermédiaire d'un dossier d'en-tête cela échoue horriblement et j'obtiens l'erreur suivante. Je compile avec gcc de Geany, tout a bien fonctionné jusqu'à maintenant. Merci pour toute aide.C++: Inclut la compilation des fichiers d'en-tête échoue mais inclut les compilations des fichiers cpp sources

erreur:

g++ -Wall -o "quartile" "quartile.cpp" (in directory: /home/charles/Temp) 
Compilation failed. 
/tmp/ccJrQoI9.o: In function `main': 
quartile.cpp:(.text+0xfd): undefined reference to `quartile(std::vector<double, std::allocator<double> >)' 
collect2: ld returned 1 exit status 

"stats.h":

#ifndef GUARD_stats_h 
#define GUARD_stats_h 

#include <vector> 

std::vector<double> quartile(std::vector<double>); 

#endif 

"stats.cpp":

#include <vector> 
#include <algorithm> 
#include "stats.h" 

using std::vector; using std::sort; 

double median(vector<double> vec){ 
    //code... 
} 

vector<double> quartile(vector<double> vec){ 
    //code and I also reference median from here. 
} 

"quartile.cpp" :

#include <iostream> 
#include <vector> 
#include "stats.h" //if I change this to "stats.cpp" it works 

using std::cin;  using std::cout; 
using std::vector; 

int main(){ 
    //code and reference to quartile function in here. 
} 

Répondre

7

La compilation échoue car vous avez déclaré cette fonction uniquement. Sa définition est dans une unité de compilation différente, et vous ne liez pas ces deux ensembles.

Ne g++ -Wall -o quartile quartile.cpp stats.cpp et ça va fonctionner.

+0

Merci beaucoup, comme je l'ai dit simple, mais la quantité de douleur que vous avez enregistré est incroyable. Je me demandais à ce sujet en lisant le livre, je ne savais pas comment stats.h trouverait stats.cpp, je pensais juste qu'il utiliserait un peu de magie, un peu comme l'importation de python. – Chazadanga

0

Vous devez indiquer g ++ à propos des deux fichiers d'entrée .cpp. Je ne suis pas expert en g ++, mais ça ressemble à une erreur de linker.

Comme

g ++ -Wall -o "quartile" "quartile.cpp" "stats.cpp"

Questions connexes