+2  A: 

The word you’re looking for is “declare”, not “prototype”.

In any case, that’s normal. Usually you’d just include the relevant header files:

// ClassB.h

#include "ClassA.h"

class ClassB {
public: ClassA* ca; };

This will cause problems with circular references, though (but in all other cases it’s fine).

Another thing: Don’t forget your include guards, to protect against multiple inclusion of a file. That is, always write header files in the following way:

#ifndef UNIQUE_IDENTIFIER_HERE
#define UNIQUE_IDENTIFIER_HERE

// Rest of header file here.

#endif // ndef UNIQUE_IDENTIFIER_HERE

The UNIQUE_IDENTIFIER_HERE is usually an all-uppercase variant of the header file name, e.g. ‹PROJECTNAME›_‹PATH_TO_HEADER›_‹HEADERNAME›_H. For example, I’m currently working in a project (called “SeqAn”) that has a header file in the path parallel/taskdata.h. The unique identifier I use is thus SEQAN_PARALLEL_TASKDATA_H.

Konrad Rudolph
okay, well I always use the include guards. So how would I be able to use constants across multiple files? I have constants defined like: `const int CONSTANT = 0` within a namespace in a header and I can't use them in other files. I tired using the `static` qualifier. This seems like such a simple problem but I can't figure it out.
Dooms101
A: 

Yes it is obvious way.

This approach is most suitable when you're trying to avoid mutual dependencies among headers. If you're sure that no mutual dependency appears between two headers it is normal that you #include one in another.

Keynslug