PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.cplus > for correct class structure
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
for correct class structure

Réponse
 
LinkBack Outils de la discussion
Vieux 04/04/2008, 23h58   #1
me.devilspride@gmail.com
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut for correct class structure

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
  Réponse avec citation
Vieux 05/04/2008, 00h28   #2
Jim Langston
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: for correct class structure

me.devilspride@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
tazmaster@rocketmail.com


  Réponse avec citation
Vieux 05/04/2008, 01h07   #3
me.devilspride@gmail.com
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: for correct class structure

On Apr 4, 7:28pm, "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 s.
  Réponse avec citation
Vieux 05/04/2008, 01h52   #4
Jim Langston
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: for correct class structure

me.devilspride@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 s.


There is no relationship between A and B in your code. A does not create 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
tazmaster@rocketmail.com


  Réponse avec citation
Vieux 05/04/2008, 02h34   #5
me.devilspride@gmail.com
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: for correct class structure

On Apr 4, 8:52pm, "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 s.

>
> There is no relationship between A and B in your code. A does not create 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.
  Réponse avec citation
Vieux 05/04/2008, 21h08   #6
me.devilspride@gmail.com
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: for correct class structure

On Apr 4, 9:34pm, me.devilspr...@gmail.com wrote:
> On Apr 4, 8:52pm, "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 s.

>
> > There is no relationship between A and B in your code. A does not create 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 would be very appreciated. Thanks.
  Réponse avec citation
Vieux 05/04/2008, 22h20   #7
tragomaskhalos
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: for correct class structure

On 5 Apr, 21:08, me.devilspr...@gmail.com wrote:
> On Apr 4, 9:34pm, me.devilspr...@gmail.com wrote:
>
>
>
>
>
> > On Apr 4, 8:52pm, "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 accessX
> > > >>> 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 s.

>
> > > There is no relationship between A and B in your code. A does not create 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 would be very appreciated. Thanks.- Hide quoted text -
>
> - Show quoted text -


You're thinking in Java/C# terms - separate the interface from
the implementation and all will be well:

// A.h
class A {
int X;
public:
void Q();
void R();
};

///B.h
class B: public someclass {
public:
D( A& a );
};

//A.cpp
#include "A.h"
#include "B.h"
void A::Q() {
R();
bb = new B();
bb.D( this );
}
void A::R() { uses X }

//B.cpp
#include "B.h"
#include "A.h"
void B:( A& a ) {
a.Q();
a.R();
}
  Réponse avec citation
Vieux 06/04/2008, 00h07   #8
me.devilspride@gmail.com
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: for correct class structure

On Apr 5, 5:20pm, tragomaskhalos <dave.du.verg...@logicacmg.com>
wrote:
> On 5 Apr, 21:08, me.devilspr...@gmail.com wrote:
>
>
>
> > On Apr 4, 9:34pm, me.devilspr...@gmail.com wrote:

>
> > > On Apr 4, 8:52pm, "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 s.

>
> > > > There is no relationship between A and B in your code. A does notcreate 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 instanceof 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 would be very appreciated. Thanks.- Hide quoted text -

>
> > - Show quoted text -

>
> You're thinking in Java/C# terms - separate the interface from
> the implementation and all will be well:
>
> // A.h
> class A {
> int X;
> public:
> void Q();
> void R();
>
> };
>
> ///B.h
> class B: public someclass {
> public:
> D( A& a );
>
> };
>
> //A.cpp
> #include "A.h"
> #include "B.h"
> void A::Q() {
> R();
> bb = new B();
> bb.D( this );}
>
> void A::R() { uses X }
>
> //B.cpp
> #include "B.h"
> #include "A.h"
> void B:( A& a ) {
> a.Q();
> a.R();
>
> }
>
>


OK, but adding header files that way wouldn't cause any problems. I
did the same but got errors like - "C++ forbids declaration with no
type". But I will again try, Thanks.
  Réponse avec citation
Vieux 06/04/2008, 01h01   #9
tragomaskhalos
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: for correct class structure

On 6 Apr, 00:07, me.devilspr...@gmail.com wrote:
> On Apr 5, 5:20pm, tragomaskhalos <dave.du.verg...@logicacmg.com>
> wrote:
>
>
>
>
>
> > On 5 Apr, 21:08, me.devilspr...@gmail.com wrote:

>
> > > On Apr 4, 9:34pm, me.devilspr...@gmail.com wrote:

>
> > > > On Apr 4, 8:52pm, "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 s.

>
> > > > > There is no relationship between A and B in your code. A does not create 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 would be very appreciated. Thanks.- Hide quoted text -

>
> > > - Show quoted text -

>
> > You're thinking in Java/C# terms - separate the interface from
> > the implementation and all will be well:

>
> > // A.h
> > class A {
> > int X;
> > public:
> > void Q();
> > void R();

>
> > };

>
> > ///B.h
> > class B: public someclass {
> > public:
> > D( A& a );

>
> > };

>
> > //A.cpp
> > #include "A.h"
> > #include "B.h"
> > void A::Q() {
> > R();
> > bb = new B();
> > bb.D( this );}

>
> > void A::R() { uses X }

>
> > //B.cpp
> > #include "B.h"
> > #include "A.h"
> > void B:( A& a ) {
> > a.Q();
> > a.R();

>
> > }

>
> OK, but adding header files that way wouldn't cause any problems. I
> did the same but got errors like - "C++ forbids declaration with no
> type". But I will again try, Thanks.- Hide quoted text -
>
> - Show quoted text -


Sorry, I forgot the required forward declarations
in the B header:

///B.h
class A; // <===== forgot this.
class B: public someclass {
public:
D( A& a );
};


  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 10h56.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,37697 seconds with 17 queries