[C++] Podział kodu na pliki i błąd "multiple definition (...)"
Ostatnio zmodyfikowano 2010-07-29 22:45
ison Temat założony przez niniejszego użytkownika |
[C++] Podział kodu na pliki i błąd "multiple definition (...)" » 2010-07-29 17:37:32 witam, wiem że to jest bardzo głupie pytanie i jest na nie pewnie banalna odpowiedź. Czy ktoś mógłby mi powiedzieć dlaczego ten kod się nie kompiluje? main.cpp #include <cstdio> #include "Untitled1.cpp"
int main() { printf( "%d", a() ); while( 1 ); }
Untitled1.cpp błędy: multiple definition of `a()' first defined here ld returned 1 exit status
|
|
Pirotechnik |
» 2010-07-29 18:02:03 przecież funkcje Main masz typu int więc czemu nie masz tam return'a?? |
|
ison Temat założony przez niniejszego użytkownika |
» 2010-07-29 18:07:06 bo nie trzeba... nie każda funkcja, która nie jest voidem musi coś zwracać :p |
|
lenrokskate |
» 2010-07-29 18:07:08 po co include'dujesz plik cpp? Poprawne rozwiązanie wygląda tak:
#include <iostream> #include "funkcja.hpp"
int main() { std::cout << funkcja(); getchar(); return 0; }
#ifndef FUNKCJA_INCLUDE #define FUNKCJA_INCLUDE
int a();
#endif
#include "funkcja.hpp"
int a() { return 5; }
Twój problem polegał na tym, że definiowałeś funkcję w dwóch różnych pilkach cpp i linker nie wiedział którą ma uruchomić |
|
ison Temat założony przez niniejszego użytkownika |
» 2010-07-29 18:11:59 dzięki, czy jeśli dołączam plik nazwa.hpp to on automatycznie szuka pliku nazwa.cpp i go z nim kojarzy? bo ani w main ani w twoim pliku hpp nie zostało użyte słowo funkcja.cpp
p.s. chyba jednak zmienie IDE, bo w DEV'ie sie praktycznie NIE DA robić projektów |
|
lenrokskate |
» 2010-07-29 18:15:53 to znaczy: do wywołania funkcji wystarczy ci sama deklaracja funkcji (to znaczy bez { i }), pod warunkiem, że jego definicja (czyli {}) jest w innym (lub tym samym) pliku cpp
po prostu musisz sobie wyobraźić, że main.cpp to nie jest główny plik, tylko wszystkie są sobie równe, a wywołanie programu, to zwykłe użycie funkcji main()
ściągnij Code::Blocks, genialne IDE szczególnie pod Linem, a pod Winem tylko tyćkę gorsze, ale i tak cudo |
|
ison Temat założony przez niniejszego użytkownika |
» 2010-07-29 18:20:15 mam code::blocks :p
no dobra ale skąd on wie że definicja funkcji a() znajduje się akurat w funkcja.cpp a nie niewoadomoco.cpp? przecież funkcja.cpp nie jest w żaden sposób includowana ani w mainie ani w funkcja.hpp. Zgodnie z zasadami logiki funkcja a() w twoim przykładzie nie ma definicji (bo funkcja.cpp nie jest wcale powiązana z projektem), ale tak nie jest. Dlaczego? |
|
lenrokskate |
» 2010-07-29 19:43:26 przy tworzeniu binarki linker odpowiednio tworzy powiązania |
|
« 1 » 2 |