Funkcje inline nie mogą mieć deklaracji(prototypu) i definicji w dwóch różnych miejscach. Wszystkie externy muszą gdzieś być zdefiniowane, czyli musisz gdzieś wpisać “int a,b;” nawet gdy użytkownik podaje wartość.
W p021.cpp (swoją drogą ciekawe nazwy pliku) funkcja inline musi być na górze, tzn. przed jej wywołaniem bo tak jak napisał Fiołek funkcja inline musi być od razu zdefiniowana (najlepiej wsadź ją do pliku .h i ogranicz pragmą once).
Po drugie do obu plików włączasz definicję:
int i = 10
Więc kompilator wywala ten właśnie błąd:
Wywal definicję z pliku nagłówkowego i wsadź ją do pliku p021a.cpp.
Po trzecie - co znaczy #include “p021a.cpp” :shock: Te pliki same się połączą na etapie linkowania, więc to jest niepotrzebne.
nagl.h :
extern int a, b;
void druga(void);
#pragma once
inline int wieksza(int a, int b)
{
if(a>b)
{
return a;
}
else
{
return b;
}
}
To co ja włączyłem to tzw. strażnik nagłówka. Będzie o tym w rozdziale 6, jeżeli tego nie rozumiesz. A co do kodu alexa , to czytałem, że teraz stosuje się po prostu anonimową przestrzeń nazw
namespace
{
//...
}
PS. Leogict - po co kopiujesz ten sam temat na 5 różnych for :?: