You can't use object without it's prototype declared. Forward declaration is good only to let you declare a pointer or reference without include and add lot of dependencies.
In header files you don't want many unnecessary includes. many include can cause long compilation time. therefore when you just need to declare a pointer or a reference, in class or function prototypes, it is good idea to use forward declaration instead of include.
look at the sample:
file A.h
class A{
public:
void func() const;
};
file B.h
//fwd declaration instead of include
class A;
class B{
public:
//use fwd decl.
B(const A& a);
};
file B.cpp
#include "B.h"
#include "A.h" //have to include since I using the obj.
B::B(const A& a){
a.func();
}