linker errors are some of the worst errors cause they don't tell whats wrong at all
Like the error is probably not really related to the actual problem at all
I mostly agree, I do think they're usually related but they tend to be uninformative and only point you in a very general direction.
You should be using #pragma once for header files that way you don't need to worry so much about double including
Sorry for the confusion. I am using them, I just left them out of the paste without thinking about the confusion that might cause.
you should be including stuff in header files not source files
Yeah have fun waiting for you compiler to finish. I mean, I suppose it's a subjective thing, but in my experience it's very standard (among professionals) to leave them out of the headers as much as possible because they will make compilation longer and bloat up the namespaces. If you're going to use some module, you don't care about what specific shit that module internally uses, and you don't want to expose what you don't need. You only care about the module itself, so it absolutely makes sense to me that whatever shit the module uses will be included in its implementation, not its header, when possible.
only add a cpp file if you need it
I've learned to do the opposite: add a cpp for every header, even if you don't 'need' it. This is so you know compile time if your header is not able to compile by itself. If you're going to include it, you want to be sure the header itself is enough. Of course, if the header has forward declarations you will still need to include their definitions seperately: but only if you are going to actually use them.
It seems to me like there are a lot of unnecessary classes and files and could be simplified a lot
Right, I think what I've said above applies here too, and keep in mind I stripped back a lot of the context, and tried to only present what is giving me the problem.
If you disagree with anything I've said, I'd be happy to hear your thoughts though.
They're all c++ functions as part of classes, I don't think extern is relevant here.
I left them out because they don't seem relevant here. (Even if I didn't have them, the compiler would generate default constructors though)
Again sorry for any confusion caused by stripping out so much of the context surrounding the snippets, there's quite a lot of code surrounding this actually but I am pretty certain none of it would influence the linker errors (inb4 this is where my mistake lies), because supposedly it's simply "I can't find the implementation for this function!", however I do have a function with that signature. The declaration is obviously found because it compiles, it just somehow doesn't link properly.
That would be true if you were talking about a header, but it's the .cpp, where you literally use a namespace.
In the header, I do surround my declarations with the namespace.