C ++: Incluindo header-file falhar compilação, mas inclusive de origem compila arquivos cpp

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

  •  18-09-2019
  •  | 
  •  

Pergunta

Este é provavelmente muito simples, mas isso está me atrapalhando no meu caminho c estrada ++. Atualmente, estou lendo através c acelerado ++ e eu decidi overkill um dos exercícios. Tudo funcionou bem e meu código funcionou muito bem até que eu dividi-lo em um cabeçalho e arquivo de origem separado. Quando eu importar meu arquivo de origem .cpp que contém algumas funções que eu escrevi, tudo corre bem. Mas quando eu tento importar as funções através de um arquivo de cabeçalho falhar terrivelmente e eu recebo o seguinte erro. Estou compilando com gcc de Geany, é tudo funcionou bem até agora. Obrigado por qualquer ajuda.

Erro:

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.
}
Foi útil?

Solução

A compilação falha, porque você só ter declarado esta função. Sua definição é na unidade de compilação diferente, e você não está ligando os dois juntos.

Do g++ -Wall -o quartile quartile.cpp stats.cpp e ele vai trabalhar.

Outras dicas

Você precisa dizer g ++ sobre os dois arquivos de entrada .cpp. Eu não sou especialista em g ++, mas parece que um erro de vinculador.

Como

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top