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?
0
0
Zapomniałem wspomnieć że wygooglowalem juz oczywiście z tym ze tak jak na pisalem nie rozumiem dzialania.
1
W takim razie zapraszam do przestawienia MCVE
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.