I have 3 files to compile with G++, the main file is like this:
//main.cpp
#include "test.hpp"
int main(int argc,char** args) {
//
}
The second file is the header file:
//test.hpp
namespace shared {
class test {
//constructor
test();
};
}
The last file is the code file for test.hpp
//test.cpp
shared::test::test() {
//
}
And I compile using G++ this way:
g++ -c main.cpp test.cpp
However, G++ complains about undefined identifier ‘shared’ in the file ‘test.cpp’. In the command line I already pass in file ‘main.cpp’, which includes the header file. How to fix this? I only want to have all the ‘#include’s be in main.cpp, and no where else.
Add
#include "test.hpp"at the beggining oftest.cpp.Compiler doesn’t care about the order of files in the commandline. It only affects the linker.
Please also note, that the usual way of compiling multi-file projects is to compile each of them to different sub-object like so:
This allows you to recompile only the files that really did change. If you think about it for a while, you’ll find out that a
.cppfile can contain many headers without a problem; however, the compilation time will increase when your headers will start to have many headers included. Forward declarations can help solve those issues, yet with your simple example simple solution will work.