Pop Collin
Pop Collin

Reputation: 28

If I need to include another header in my header and I plan to use it in my CPP file, should I include it there as well for readability?

Right so I'll try to explain my question as best as I can. Basically in one of my header files I need to use a class, obviously to do this I will have to include that class' header in the current one. I was just thinking, since I'm planning to create a new instance of this class later on down the line, should I also include it in the .cpp file to help with readability? I know that I don't have to, but would it make sense to do that? Or am I just being insane?

Example A, header file:

include "APIManager.h"
class Environment
{
public:
    static void Initialize();
private:
    APIManager apiManager;
};

Example A, source file:

include "Environment.h"
// Should I include "APIManager.h" here too?
void Environment::Initialize()
{

}

Tried looking around here for it, but I'm unsure of how to phrase it, so apologies if this has already been asked.

Also, in general should you be including the header files that the class's source needs in that class's header? Thanks.

Upvotes: 0

Views: 1017

Answers (4)

Rob K
Rob K

Reputation: 8926

If the source file is Environment.cpp, where you are implementing what you declared in Environment.h, then no, you should not reinclude it.

If on the other hand, the source file is SomeOtherFile.cpp where you are simply using the declarations from Environment.h, and you are going to use the declarations from APIManager.h separately and independently of their usage as part of Environment.h, then yes, you should. You wouldn't want a future change which removes #include <Environment.h> from SomeOtherFile.cpp to break it unexpectedly.

In other words, if SomeOtherFile.cpp has a direct dependence on APIManager.h, then that dependence should be directly expressed via a #include.

Upvotes: 2

Donnie
Donnie

Reputation: 46943

Include headers where they're needed.

You should include them in a header file if your class definition includes objects defined in the header you're including. If you're only using the contents of a header in the cpp, then include it in the cpp.

Never include the same external header in both file.h and file.cpp if file.cpp also includes file.h.

Upvotes: 0

Jarod42
Jarod42

Reputation: 218323

I would not, except if the #include "APIManager.h" might not be in header.

<string> might be included in <iostream>, but you should include <string> anyway even if your library include include it and you use <iostream>

Upvotes: 0

David
David

Reputation: 28178

This is basically a style question, but:

No you shouldn't include it in the cpp and the header. It's overly verbose and no one does it.

Upvotes: 2

Related Questions