Consider the following two scenarios (Edited just to complete the whole question and make it clearer)
Case 1: (doesnt compile as rightly mentioned below)
//B.h
#ifndef B_H
#define B_H
#include "B.h"
class A;
class B { 
        A obj;
        public:
        void printA_thruB();
         };  
#endif
//B.cpp
#include "B.h"
#include <iostream>
void B::printA_thruB(){
        obj.printA();
        }   
//A.h;
#ifndef A_H
#define A_H
#include "A.h"
class A { 
        int a;
        public:
        A();
        void printA();
         };  
#endif   
//A.cpp                           
#include "A.h"                    
#include <iostream>               
A::A(){                           
        a=10;                     
        }                         
void A::printA()                  
{                                 
std::cout<<"A:"<<a<<std::endl;    
}  
//main.cpp
 #include "B.h"
  #include<iostream>
 using namespace std;
 int main()
 {
 B obj;
 obj.printA_thruB();
 }
Case 2: (the only modifications...works without compiliation error)
//B.h
#include "A.h" //Add this line
//class A;     //comment out this line
Let us assume both the A.cpp and B.cpp are complied together. Do the above two scenarios make any differences? Is there a reason to prefer one method over the other?
Edit: So how do I make scenario 1 work.