Re: Help for correct class structure
On Apr 4, 9:34 pm, me.devilspr...@gmail.com wrote:
On Apr 4, 8:52 pm, "Jim Langston" <tazmas...@rocketmail.com> wrote:
me.devilspr...@gmail.com wrote:
On Apr 4, 7:28 pm, "Jim Langston" <tazmas...@rocketmail.com> wrote:
me.devilspr...@gmail.com wrote:
Hi,
I have two classes A and B as follows.
A has member data X and member functions P, Q, R. All P,Q,R access X=
and Q calls P.
B is a derived class of another Class(which I don't go into) with
member functions D, E.
P in A calls D in B.
D in B calls Q, R in A.
It's a big recursion. Everything works if I move D,E to class A. But=
how do I achieve above as value of X need to be used through the
whole program execution? I wanted to know if what I am trying to
accomplish is something doable or I need to redesign my class
structures.
Thanks
How about showing some actual code? Even something like:
class A
{
int X;
public:
P() {}
Q() {}
// ...
};
etc..
What your'e trying to describe in words is not clear.
--
Jim Langston
tazmas...@rocketmail.com
I am sorry for that
class A {
int X;
public:
P() { Q(); }
Q() { D(); R(); }
R() { uses X }
};
class B: public someclass {
//inherited data from someclass
public:
D() {
Q(); //end condition for recursion depends on X
R();
}
};
I can't create D() in A as D() access private data in B. But D() calls=
both Q() and R() and value of X has to be same everywhere. i.e. R()
called from D access the same X value that was used by class A. I
guess I need to pass around this pointer of A's object or X. I guess
it shouldn't be difficult but I am just blocked.
Hope this helps.
There is no relationship between A and B in your code. A does not cre=
ate an
instance of B, or B A, A does not derive from B, nor B A. How does Q =
know
which instance of B to call D for? How does D know which instance of =
A to
call Q for? You either have to pass a B to A and/or an A to B.
class A {
{
int X;
public:
P(B& b) { Q( b ); }
Q(B& b) { b.D( this ); )
R( ) { uses X )
};
class B: public someclass {
public:
D( A& a ) {
a.Q( this );
a.R();
}
--
Jim Langston
tazmas...@rocketmail.com
Thanks for the reply, that actually was my problem. Actually in my
case there will be just one instance of A and B. But there isn't just
one class B, there are lots of classes derived from a parent class. I
am actually creating objects for these classes, kind of linked list. A
has functions for creating a list, but it may be nested that's why
there is a recursion. I guess passing A to B in my case is good. Thank
you.
I still have some problems, Here A creates an instance of B and calls
member function of B.
///A.h
class A {
{
int X;
public:
P() { Q(); }
Q() {
R();
bb = new B();
bb.D( this ); )
R() { uses X )
};
///B.h
class B: public someclass {
public:
D( A& a ) {
a.Q();
a.R();
};
But there is a cyclic dependency and forward declaration of A in B
doesn't work. What should I do?
Any help would be very appreciated. Thanks.