(C++) + (inheritance) = little problem
Hi folks...
while I coding my game, I''ve meet a problem...
It''s not a big problem, but I''m onlooker of to know if exist a solution that doesn''t obligate me to remake all...
This is my problem...
I''ve a class A that inherits from classes B and C....
Class C has a struct XXX, and this struct has a pointer to class A object...
That give me some problems because a base class can''t to have an attribute of her superclass ... the files inclusions would be redundant...
There are solutions? Or must I remake the logical structure?
goodbye and thanks to your time...
Why does class C need a pointer to type A? If A is derived from C, then C should be able to hold a C pointer, and it can point to derived objects. If you need to call A-class-only functions from that C pointer, then there''s some design issues.
class A* C::XXX::Pointer;
[edit: smilies]
[edited by - smart_idiot on March 3, 2003 12:35:25 PM]
[edit: smilies]
[edited by - smart_idiot on March 3, 2003 12:35:25 PM]
I suggest an attempt to re-order your type hierarchy more like a tree structure.
Circular references are /usually/ indicative of a flawed design. I have no metrics, however, to back up this assertion.
Circular references are /usually/ indicative of a flawed design. I have no metrics, however, to back up this assertion.
I think you''ll need to forward declare A before C:
Was this the problem? I''m not sure
class B {};class A; //forward declarationclass C { A* a };class A : public B, public C {};
Was this the problem? I''m not sure
Pointers to classes are fine. Just forward declare the class before its name is made use of
ie
[edited by - petewood on March 3, 2003 12:45:43 PM]
ie
#include <string>class Cat;class Truck;class Dog {public: Dog(const std::string& name); bool Chase(Cat*); bool Chase(Truck*);private: std::string name_;};
[edited by - petewood on March 3, 2003 12:45:43 PM]
Do direct pointers to derived classes contained within a base class still count as composite structure, or does it have to be a base class pointer as well? While we''re on the subject just thought I''d ask
hi ... I'll try to explain my problem better
all right... that's all.
I'll remake type hierarchy, but before I would want to know how do you would arrange it.
I love to know other people's ideas.... it help me to improve =)
Ps: I don't want put "newstruct* XXX" in class_a.h because semantically it must to be in class_c.h
[edited by - BlueChip on March 3, 2003 2:55:40 PM]
//****************//class_b.h//****************class b{..........................}-----------------------------------------//****************//class_c.h//****************#include "class_a.h" <--- to define newstructstruct newstruct{............a* trallallero}class c{.................newstruct* XXX}-----------------------------------------//****************//class_a.h//****************#include "class_b.h"#include "class_c.h"class a: public b, c{..........................}
all right... that's all.
I'll remake type hierarchy, but before I would want to know how do you would arrange it.
I love to know other people's ideas.... it help me to improve =)
Ps: I don't want put "newstruct* XXX" in class_a.h because semantically it must to be in class_c.h
[edited by - BlueChip on March 3, 2003 2:55:40 PM]
Hmm, I think you''re lacking header guards too.
But the problem you have now can be solved like this:
But the problem you have now can be solved like this:
//****************//class_c.h//****************class a; //THIS IS A FORWARD DECLARATIONstruct newstruct{............a* trallallero};class c{.................newstruct* XXX};
ok, from the moment that I have already demonstrated my ignorance I can continue.............
I''ve used forward declaration, but another problem is born...
in class_c.cpp I must use this call:
(newstruct* XXX)->(Get a* trallallero) -> (method Class_b.h)
I can do it, because all class_b method are inherit by class_a, but to do this, I must include in bottom class_c.h the class_a header...... otherwise the compiler tell me that class A hasn''t (Get a* trallallero) method....
but if I put the header..... I recall to start point ^__^
I am becoming crazy O_o
I''ve used forward declaration, but another problem is born...
in class_c.cpp I must use this call:
(newstruct* XXX)->(Get a* trallallero) -> (method Class_b.h)
I can do it, because all class_b method are inherit by class_a, but to do this, I must include in bottom class_c.h the class_a header...... otherwise the compiler tell me that class A hasn''t (Get a* trallallero) method....
but if I put the header..... I recall to start point ^__^
I am becoming crazy O_o
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement