Slowo kluczowe inline i multiply definion

0

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

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.

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