Nie do konca rozumiem jak działa inline, a wlasciwie nie do konca rozumiem blad kompilatroa, mianowicie mam plik nagłowkowy .h a w nim deklaracje szablonu funkcji o nazwie myFun()
, ta nazwa występuje w pliku tylko raz a mimo to otrzymuje błąd in function `myFunc....': multiple definition of myFunc....
. Blad eliminuje wstawienie 'inline' przed funkcje jednak nie rozumiem dlaczego wgl linker / kompilator ma z tym problem skoro funkcje wystepuje tylko raz oraz dlczago header guard temu nie zapobiega?
- Rejestracja:około 9 lat
- Ostatnio:prawie 5 lat
- Postów:36
0
edytowany 2x, ostatnio: Spejson_

- Rejestracja:prawie 12 lat
- Ostatnio:około 9 godzin
- Lokalizacja:Szczecin
- Rejestracja:około 9 lat
- Ostatnio:prawie 5 lat
- Postów:36
0
Zapomniałem wspomnieć że wygooglowalem juz oczywiście z tym ze tak jak na pisalem nie rozumiem dzialania.

- Rejestracja:prawie 12 lat
- Ostatnio:5 minut
- Postów:1027
0
Takie wytłumaczenie kiedyś znalazłem:
There may be more than one definition of an inline function or variable (since C++17) in the program as long as each definition appears in a different translation unit and (for non-static inline functions and variables (since C++17)) all definitions are identical. For example, an inline function or an inline variable (since C++17) may be defined in a header file that is #include'd in multiple source files.
A header guard, nie wiem czemu by miał tutaj zapobiegać. Jak masz header x.h
, w którym umieszczasz definicję funkcji int f(){ return 0; }
, to gdy w pliku a.cc
masz #include "x.h"
, w pliku b.cc
"#include "x.h", to kompilując te pliki oddzielnie, dostaniesz dwa pliki obiektowe, które zawierają symbol powiązany z funkcją
int f()`, dlatego linker się sprzeciwi.
edytowany 1x, ostatnio: enedil
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.