multiple definition of...

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?

1

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.

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++/Dzielenie-kodu-na-kilka-plikow-zrodlowych/310

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. :/

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 ;​)

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