when class A and class relationship is very close, like that
// chair.h
#include "room.h"
class chair
{
room* a;
public:
chair(void);
~chair(void);
};
// chair.cpp
#include <iostream>
//#include "room.h"
#include "chair.h"
chair::chair() //: a ( *(new chair() ) )
{
printf("%d Line\n",__LINE__);
//a =new chair ; //terrible, will be loop
printf("here is chair\n");
std::cout<<"chair's constructor\n";
}
chair::~chair()
{
std::cout<<"chair's destructor\n";
}
// room.h
#include "chair.h"
class chair;
class room
{
chair* b;
public:
room(void);
virtual ~room(void);
};
//room.cpp
#include <iostream>
#include "room.h"
//#include "chair.h"
room::room()
{
printf("%d Line\n",__LINE__);
b = new chair;
std::cout<<"room's constructor\n";
}
room::~room()
{
std::cout<<"room's destructor\n";
}
main.cpp
#include <stdio.h>
#include "room.h"
#include "chair.h"
int main()
{
setbuf(stdout,NULL);
printf("%d Line\n",__LINE__);
room a;
printf("%d Line\n",__LINE__);
chair b;
printf("%d Line\n",__LINE__);
}
the two .h file will contain each other, to compile the project, it will be loop
the right way
// chair.h
class room;
class chair
{
room* a;
public:
chair(void);
~chair(void);
};
// chair.cpp
#include "room.h"
#include "chair.h"
chair::chair() //: a ( *(new chair() ) )
{
printf("%d Line\n",__LINE__);
//a =new chair ; //terrible, will be loop
printf("here is chair\n");
std::cout<<"chair's constructor\n";
}
chair::~chair()
{
std::cout<<"chair's destructor\n";
}
// room.h
class chair;
class room
{
chair* b;
public:
room(void);
virtual ~room(void);
};
//room.cpp
#include <iostream>
#include "room.h"
#include "chair.h"
room::room()
{
printf("%d Line\n",__LINE__);
b = new chair;
std::cout<<"room's constructor\n";
}
room::~room()
{
std::cout<<"room's destructor\n";
}
//main.cpp
#include <stdio.h>
#include "room.h"
#include "chair.h"
int main()
{
setbuf(stdout,NULL);
printf("%d Line\n",__LINE__);
room a;
printf("%d Line\n",__LINE__);
chair b;
printf("%d Line\n",__LINE__);
}
use forward declaration, you only can declaration a class reference or a point to a class ,
becase it’s size is knowed by compiler, the compile can compute the size of the class.
declaration a class object ,will be error