C ++: Compreso file di intestazione fallisce la compilazione, ma tra cui l'origine compilazioni dei file cpp

StackOverflow https://stackoverflow.com/questions/1483491

  •  18-09-2019
  •  | 
  •  

Domanda

Questo è probabilmente molto semplice, ma mi sta ostacolando la mia strada verso il basso c ++ strada. Attualmente sto leggendo attraverso accelerato C ++ e ho deciso di Overkill uno degli esercizi. Tutto ha funzionato bene e il mio codice ha funzionato bene fino a quando ho diviso in un colpo di testa e file sorgente separato. Quando ho importare i miei file sorgente cpp che contiene alcune funzioni che ho scritto, tutto funziona bene. Ma quando si tenta di importare le funzioni tramite un file di intestazione non riesce orribilmente ed ottengo il seguente errore. Sto compilazione con gcc da Geany, è tutto ha funzionato bene fino ad ora. Grazie per qualsiasi aiuto.

errore:

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.
}
È stato utile?

Soluzione

Compilation non riesce, perché si è dichiarato solo questa funzione. La sua definizione è in diverse unità di compilazione, e non si sta collegando quei due insieme.

Fare g++ -Wall -o quartile quartile.cpp stats.cpp e funzionerà.

Altri suggerimenti

È necessario dire g ++ su entrambi i file di input cpp. Io non sono esperto di g ++, ma sembra che un errore di linker.

come

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top