A header (.h
, .hpp
, ...) file contains
class X { ... };
)inline int get_cpus() { ... }
)void help();
)extern int debug_enabled;
)A source file (.c
, .cpp
, .cxx
) contains
void help() { ... }
or void X::f() { ... }
)int debug_enabled = 1;
)However, the convention that headers are named with a .h
suffix and source files are named with a .cpp
suffix is not really required. One can always tell a good compiler how to treat some file, irrespective of its file-name suffix ( -x <file-type>
for gcc. Like -x c++
).
Source files will contain definitions that must be present only once in the whole program. So if you include a source file somewhere and then link the result of compilation of that file and then the one of the source file itself together, then of course you will get linker errors, because you have those definitions now appear twice: Once in the included source file, and then in the file that included it. That's why you had problems with including the .cpp
file.