Deine test() ist in einem C-Quellcode definiert (Endung .c) und wird
daher auch als C-Funktion übersetzt. Du sie deshalb in anderen
Sourcefiles über das Includefile als C Funktion bekanntmachen.
1 | extern "C" void test(void);
|
2 | // ^^^
|
Ohne diese Kennzeichnung wird beim Aufruf der Code und interner
Symbolname für eine C++ Funktion erzeugt, bei der Definition aber der
Code und interner Symbolname für eine C Funktion. Der Linker
unterscheidet die aber genaustens und meldet, dass die C++ Funktion
test() nirgends definiert ist.
Wenn du das nicht möchtest, benutze statt .c und .h die .cpp und .hpp
Dateiendungen und arbeite durchgehend in C++.