mutual dependency

T

thomas

-------------code------------
class A{
public:
A(){}
void f(){
B *b = new B();
}
};

class B{
public:
B(){}
void f(){
A *a = new A();
}
};
---------------code------------
for the above sample code, there's compile error.
if I put a declaration "class B;" at the begining, it says that no
default constructor.
how to declare a default constructor to avoid the compile error?
 
S

Saeed Amrollahi

-------------code------------
class A{
public:
     A(){}
     void f(){
           B *b = new B();
     }

};

class B{
public:
      B(){}
      void f(){
          A *a = new A();
      }};

---------------code------------
for the above sample code, there's compile error.
if I put a declaration "class B;" at the begining, it says that no
default constructor.
how to declare a default constructor to avoid the compile error?

Hi Thomas

Put the definition of A::f() after the the defintion of B:

class A{
public:
A(){}
void f();
};


class B{
public:
B(){}
void f() {
A *a = new A();
}

};

void A::f()
{
B *b = new class B();
}

it compiles and works.

FYI, such mutual dependency isn't good sign of object-oriented design.

Regards,
-- Saeed Amrollahi
 
V

Victor Bazarov

Saeed said:
-------------code------------
class A{
public:
A(){}
void f(){
B *b = new B();
}

};

class B{
public:
B(){}
void f(){
A *a = new A();
}};

---------------code------------
for the above sample code, there's compile error.
if I put a declaration "class B;" at the begining, it says that no
default constructor.
how to declare a default constructor to avoid the compile error?

[..]

FYI, such mutual dependency isn't good sign of object-oriented design.

Really? Why is that?

V
 
S

Saeed Amrollahi

Saeed said:
-------------code------------
class A{
public:
     A(){}
     void f(){
           B *b = new B();
     }
};
class B{
public:
      B(){}
      void f(){
          A *a = new A();
      }};
---------------code------------
for the above sample code, there's compile error.
if I put a declaration "class B;" at the begining, it says that no
default constructor.
how to declare a default constructor to avoid the compile error?

FYI, such mutual dependency isn't good sign of object-oriented design.

Really?  Why is that?

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask- Hide quoted text -

- Show quoted text -

Hi Victor
I just mean, with a good design, we can avoid such mutual
dependencies.
I face with the following code patterns a lot of times:
class A {
B* pB;
};

class B {
A* pA;
};

with a review on class design I can avoid such "mutual" dependencies.

Regards,
-- Saeed Amrollahi
 
V

Victor Bazarov

Stuart said:
Victor said:
Saeed said:
-------------code------------
class A{
public:
A(){}
void f(){
B *b = new B();
}

};

class B{
public:
B(){}
void f(){
A *a = new A();
}};

---------------code------------
for the above sample code, there's compile error.
if I put a declaration "class B;" at the begining, it says that no
default constructor.
how to declare a default constructor to avoid the compile error?

[..]

FYI, such mutual dependency isn't good sign of object-oriented design.

Really? Why is that?

V

I suspect you're playing devil's advocate here Victor :)

Saeed in his reply quoted a different kind of dependency than the OP
had, and that's one of my points - there are different types of
dependency, and this particular one usually isn't especially bad, or an
indication of a bad design. For example, updating data usually follows
with updating the view associated with data, and vice versa, user
interaction with the view can cause an update in the data... Is that a
flaw in the design? Mmm... No.
> I'm going to
direct the OP to Lakos's Large-Scale C++ Software Design, which had
quite a good discussion of issues to do with cyclic dependencies. (I
know it's possibly a bit dated in some ways now, but I remember it being
fairly decent.)

It's a decent book once you learn to skip irrelevant or obsolete parts.

V
 
V

Victor Bazarov

Saeed said:
Saeed said:
-------------code------------
class A{
public:
A(){}
void f(){
B *b = new B();
}
};
class B{
public:
B(){}
void f(){
A *a = new A();
}};
---------------code------------
for the above sample code, there's compile error.
if I put a declaration "class B;" at the begining, it says that no
default constructor.
how to declare a default constructor to avoid the compile error?
[..]
FYI, such mutual dependency isn't good sign of object-oriented design.
Really? Why is that?

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask- Hide quoted text -

- Show quoted text -

Hi Victor
I just mean, with a good design, we can avoid such mutual
dependencies.

Do explain. Please.
I face with the following code patterns a lot of times:
class A {
B* pB;
};

class B {
A* pA;
};

with a review on class design I can avoid such "mutual" dependencies.

But that's not what the OP has. Look again.

V
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top