Hmmm ... it seemed easy until I tried to give s_1 a pointer to m. g++ gives
classtest1.h:17: "error: 'm' was not declared in this scope".
which makes sense, since each header file refers to the other. Can you see a way to get around this?
classtest.h:
Code:
#ifndef _classtest_h
#define _classtest_h
#include "classtest1.h"
#include "classtest2.h"
#include <iostream>
using namespace std;
class m {
public:
m() { one.setnum(6); two.setone(&one); one.setbody(this)}
void print1() {
one.print();
}
void print2() {
two.print();
}
void print3() {
cout << "hello from m" << endl;
}
private:
s_1 one;
s_2 two;
int i;
};
#endif
classtest1.h:
Code:
#ifndef _classtest1_h
#define _classtest1_h
#include "classtest.h"
#include <iostream>
using namespace std;
class s_1 {
public:
void print () {
cout << "s_1 secretnum = " << secretnum << endl;
body->print3();
}
void setnum(int x){
secretnum = x;
}
void setbody(m* _body) {
body = _body;
}
private:
int secretnum;
m* body;
};
#endif
classtest2.h:
Code:
#ifndef _classtest2_h
#define _classtest2_h
#include "classtest1.h"
#include <iostream>
using namespace std;
class s_2 {
public:
void setone(s_1* _one) {
one = _one;
}
void print() {
cout << "s_2 calling s_1" << endl;
one->print();
}
private:
s_1* one;
};
#endif
classtest.cc
Code:
#include "classtest.h"
#include "classtest1.h"
#include "classtest2.h"
#include <iostream>
using namespace std;
//slave1 one;
int main () {
m rex;
rex.print1();
rex.print2();
return 0;
}