ďťż

Ładny brzuch

Do tej pory pisałem proste programiki na zaliczenia w devcpp. Nie było problemów. Jednak postanowiłem spróbować skompilować je pod Linuxem. W kdevelop stworzyłem nowy projekt c++ i stworzyłem odpowiednie pliki (zahaczona opcja "Dodaj do projektu")i:

main.cpp:
#include <iostream> #include "defs.h" // i instrukcja main

defs.h - deklaracje funkcji

#ifndef _DEFS_H_ #define _DEFS_H_ using namespace std; double** create_matrix(int width=3, int height=3); void show_matrix(double** matrix, int width, int height); void fullfil_matrix(double** matrix, int width, int height, double number); #endif

defs.cpp - ciała funkcji.

Przy próbie zbudowania projektu:
main.cpp:(.text+0x172): undefined reference to `create_matrix(int, int)'
main.cpp:(.text+0x1e6): undefined reference to `fullfil_matrix(double**, int, int, double)'
main.cpp:(.text+0x20d): undefined reference to `show_matrix(double**, int, int)'

Czy może mi ktoś powiedzieć co robie źle - nie są to błędy C++ bo w devie sie kompiluje, a nie używam niczego co by ograniczało mnie do Windowsa. Wydaje mi się, że to coś z linkerem...



A dolaczyles do projektu plik .cpp w ktorym masz definicje tych funkcji?

Definicje są w pliku defs.cpp i wydaje mi się że go dołączyłem, gdzie to mogę sprawdzić ?

==
Znalazłem winowajce. Tak jak przypuszczałem to wina linkera. Nie linkuje automatycznie wszystkich plików.
Pod konsolą mogę napisac: g++ main.cpp funkcje.cpp
i się kompiluje w porządku - a jak to zautomatyzować w Kdevelop ?
Użytkownik KrzysieQ edytował ten post 23 październik 2007, 22:01
hmmm... Instrukcja preprocesora
#include "defs.cpp"
Nic innego mi teraz nie przychodzi ^^




hmmm... Instrukcja preprocesora
#include "defs.cpp"
Nic innego mi teraz nie przychodzi ^^

To jest idealny przyklad jak nie korzystac z include. Nie wiem jak jest w kdevelop, ale to na 95% to ze nie dodales defs.cpp do projektu

main.cpp:
#include "defs.cpp"

defs.cpp
#include "defs.h"

I działa :)
thx

:/ To juz lepiej zrob implementacje tych defs w .h bo tak sie nie robi jak zrobiles.

Już myślałem, że zrozumiałem o co chodzi a tu :/
Przykład z wikipedii z wykorzystania biblioteki boost:

#include <boost/thread/thread.hpp> #include <iostream> using namespace std; void hello_world() { cout << "Witaj świecie, jestem wątkiem!" << endl; } int main(int argc, char* argv[]) { // utwórz nowy wątek wywołujący funkcję "hello_world" boost::thread my_thread(&hello_world); // poczekaj na zakończenie wątku my_thread.join(); return 0; }

Oczywiście bibliotekę mam zainstalowaną poprawnie. A otrzymuje:

main.cpp:(.text+0x107): undefined reference to `boost::thread::thread(boost::function0<void, std::allocator<boost::function_base> > const&)' main.cpp:(.text+0x137): undefined reference to `boost::thread::join()' main.cpp:(.text+0x13f): undefined reference to `boost::thread::~thread()' main.cpp:(.text+0x1bf): undefined reference to `boost::thread::~thread()'

Co tym razem źle robie ? Pisane w kDevelop.
Użytkownik KrzysieQ edytował ten post 27 listopad 2007, 20:15
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •