multiple definition of...

Odpowiedz Nowy wątek
2018-01-24 23:25
0

Witam, mam problem z błędem "multiple definition of |tu nazwa funkcji|"

plik: main.cpp

#include <iostream>
#include "plik2.cpp"

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    return 0;
}

plik: plik1.cpp

#include "plik2.cpp"

plik: plik2.cpp

#include <iostream>

void a()
{
    std::cout << "Test";
}

Treść błędu: Multiple definition of "a()"
"#pragma once" nie pomaga, kombinacji "#ifndef" "#define" "#endif" próbowałem użyć w plik2.cpp jednak z takim samym skutkiem.
Jak pozbyć się tego problemu? Jeśli jest on spowodowany tym, że pakuje cały kod prosto do plików .cpp a nie .h to dało by się go jakoś rozwiązać bez użycia plików .h?

Pozostało 580 znaków

2018-01-24 23:30
kq

Nie includuje się plików .cpp (patrząc po pytaniu jesteś newbie, więc nie będę wypisywał potencjalnych wyjątków).

Zamiast tego utwórz plik nagłówkowy z deklaracją tej funkcji.


edytowany 1x, ostatnio: kq, 2018-01-24 23:31
Z ciekawości, jakie są wyjątki? - enedil 2018-01-25 00:15
@kq: z drugiej stron na forum siedzą setki, a przez lata taki temat mogą odwiedzić tysiące osób, więc feel free :D - WeiXiao 2018-01-25 00:18
Jestem w stanie pomyśleć o jednym, góra dwóch. Oba można poddać w wątpliwość i zrobić inaczej. 1) dzielenie implementacji i deklaracji szablonów. Niektórzy inkludują pliki cpp (inaczej nie widać definicji szablonów), inni po prostu używają plików nagłówkowych do jednego i drugiego (czyli foo.hpp/foo_impl.hpp lub odwrotnie bar_fwd.hpp/bar.hpp). Ja wolę rozwiązanie z 2 plikami nagłówkowymi, ale można to uznać. 2) wygenerowany kod czasem może być w formie którą trzeba tak zainkludować, ale to się tyczy tylko jakichś słabych mechanizmów do generowania... - kq 2018-01-25 00:25

Pozostało 580 znaków

2018-01-24 23:30
1

#include "plik2.cpp" - nie lepiej żeby to były headery #include "plik2.hpp"?
Po co includujesz pliki *cpp?
http://cpp0x.pl/kursy/Kurs-C+[...]a-kilka-plikow-zrodlowych/310


Nie pisz na priv. Zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: YooSy, 2018-01-24 23:34

Pozostało 580 znaków

2018-01-25 00:50
0

No cóż, ze 3 lata już programuje, więc mam nadzieje, że nie jestem aż takim newbie na jakiego wyglądam. :D Te 3 lata temu przerobiłem kurs od M. Zelenta do c++, Zelent olał tam trochę sprawę nie tłumacząc za bardzo "czemu?, co? i jak?" tylko pokazując jak dodać więcej plików do projektu i tyle. Dotychczas nie sprawiało mi to zbytnio problemów więc nie czułem potrzeby doinformowania się i stąd moja niewiedza o nie includowaniu plikó .cpp.
Includuje pliki .cpp ponieważ lepiej mi się czyta cały kod (nagłówki wraz z definicjami) zamiast przeskakiwać co chwilę z pliku .h do pliku .cpp. Szczerze mówiąc to trochę się zawiodłem tym, że nagłówek funkcji musi znajdować się w pliku .h a ciało w .cpp. :/

edytowany 1x, ostatnio: GrhuGhu, 2018-01-25 00:51

Pozostało 580 znaków

2018-01-25 00:51
kq
0

No niestety, C++ jeszcze nie doczekał się modułów więc musimy tak robić. Przez newbie miałem na myśli tylko C++, ciężko oceniać szerzej po jednym pytaniu ;​)


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0