Dyrektywa #include ze ścieżką dostępu

Witam.

Mam takie pytanko.

Jak dołączyć do projektu dyrektywę #include z podaną ścieżką do swojej biblioteki?

Jeśli wpiszę #include “…/moje_biblioteki/wypelnianie_i_wypisywanie_tablicy.h” to wyskakują mi błędy:

/home/adrian/Zadania z programowania/sortowanie/sortowanie_przez_scalanie/main.cpp:51: błąd: undefined reference to `wypelnij_tablice(unsigned int*, unsigned int)’

/home/adrian/Zadania z programowania/sortowanie/sortowanie_przez_scalanie/main.cpp:53: błąd: undefined reference to `wypisz_tablice(unsigned int*, unsigned int)’

/home/adrian/Zadania z programowania/sortowanie/sortowanie_przez_scalanie/main.cpp:57: błąd: undefined reference to `wypisz_tablice(unsigned int*, unsigned int)’

:-1: błąd: collect2: error: ld returned 1 exit status

Ale zapis #include “…/moje_biblioteki/wypelnianie_i_wypisywanie_tablicy.cpp” działa.

O co chodzi? Czemu działa dołączenie pliku *.cpp a nie działa dołączenie pliku .*h?

Używam:

Qt Creator 4.0.3

Bazujący na Qt 5.6.1 (GCC 4.9.1 20140922 (Red Hat 4.9.1-10), 64 bitowy)
Wersja z Jul 5 2016 04:19:27
Z poprawki ce4ddcb060

System:

Ubuntu MATE 16.04 x64

Zawartość pliku wypelnianie_i_wypisywanie_tablicy.cpp:

#include "wypelnianie_i_wypisywanie_tablicy.h"

void wypelnij_tablice(uint *tab,uint n)

{

    srand(time(NULL));

    for(uint i=0;i<n;i++)

    {

        tab[i]=(rand()%900)+100;

    }

}

void wypisz_tablice(uint *tab,uint n)

{

    for(uint i=0;i<n;i++)

    {

        if(i%10==0)cout<<endl;

        cout<<tab[i]<<" ";

    }

}

Zawartość pliku wypelnianie_i_wypisywanie_tablicy.h:

#ifndef WYPELNIANIE_I_WYPISYWANIE_TABLICY_H

#define WYPELNIANIE_I_WYPISYWANIE_TABLICY_H

#include <iostream>

#include <time.h>

#include <cstdlib>

using namespace std;

void wypelnij_tablice(uint *, uint n);

void wypisz_tablice (uint *, uint n);

#endif // WYPELNIANIE_I_WYPISYWANIE_TABLICY_H

A potrzebuję takiej biblioteki w osobnym folderze, gdyż będę używał jej w kilku różnych projektach.

 

undefined reference to błąd linkera oznaczający, że nie znalazł wymaganego obiektu (funkcji/zmiennej).

Jeśli zaincludowanie pliku .cpp “rozwiązuje” problem to znaczy, że ten plik nie był kompilowany i dołączony do reszty programu.

Jeśli używasz Qt to po prostu dodaj wszystkie potrzebne pliki .cpp do projektu.

 

 

Czyli że muszę zostać przy zaincludowaniu pliku .cpp lub muszę przerzucić pliki do projektu?

Dobra. Udało się.

Przerobiłem zawartość pliku sortowanie_przez_scalanie.pro:
 

TEMPLATE = app

CONFIG += console c++11

CONFIG -= app_bundle

CONFIG -= qt



HEADERS += ../moje_biblioteki/wypelnianie_i_wypisywanie_tablicy.h

SOURCES += main.cpp

SOURCES += ../moje_biblioteki/wypelnianie_i_wypisywanie_tablicy.cpp

 

Ale czy nie ma gdzieś opcji w Qt Creator żeby dodać te pliki? Tylko trzeba ręcznie wklepać mu dodatkowe dwie linijki do pliku .pro?

Gdzieś są polecenia dołącz do projektu - add file to project.Kompilator i linker muszą pobrać ścieżki,żeby wiedzieć gdzie szukać funkcji z twojej biblioteki.Dołączony plik pokarze ci się na liście projektu.

Będzie to w samym Qt Creatorze. 

Dobra. Znalazłem. Trzeba kliknąć na PPM na projekcie i jest opcja Dodaj pliki…

A szukałem w górnym menu